Migrate away from sp-grep (#1119)

Switches the last consumers of it to a simpler utility function that
uses `pkgutil.find_loader()`:
https://docs.python.org/3/library/pkgutil.html#pkgutil.find_loader

Both of these consumers are covered by existing tests.

Then removes `sp-grep` and the remaining parts of `pip-pop`.

Closes @W-8208817@.
This commit is contained in:
Ed Morley
2020-11-12 17:42:51 +00:00
committed by GitHub
parent 768d3fb9e5
commit 71aef447a6
9 changed files with 16 additions and 654 deletions
+2 -2
View File
@@ -68,9 +68,9 @@ DEFAULT_PYTHON_STACK="heroku-18"
WARNINGS_LOG=$(mktemp)
RECOMMENDED_PYTHON_VERSION=$DEFAULT_PYTHON_VERSION
# The buildpack ships with a few executable tools (e.g. pip-grep, etc).
# The buildpack ships with a few executable tools.
# This installs them into the path, so we can execute them directly.
export PATH=$PATH:$ROOT_DIR/vendor/:$ROOT_DIR/vendor/pip-pop
export PATH=$PATH:$ROOT_DIR/vendor/
# Set environment variables if they weren't set by the platform.
# Note: this is legacy, for a deprecated build system known as Anvil.
+2 -2
View File
@@ -20,8 +20,8 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath}
# Legacy file-based support for $DISABLE_COLLECTSTATIC
[ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1
# Ensure that Django is explicitly specified in requirements.txt
sp-grep -s django && DJANGO_INSTALLED=1
# Ensure that Django is actually installed.
is_module_available 'django' && DJANGO_INSTALLED=1
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
+1 -1
View File
@@ -14,7 +14,7 @@
source "$BIN_DIR/utils"
# Check that nltk was installed by pip, otherwise obviously not needed
if sp-grep -s nltk; then
if is_module_available 'nltk'; then
puts-step "Downloading NLTK corpora…"
nltk_packages_definition="$BUILD_DIR/nltk.txt"
+8
View File
@@ -96,3 +96,11 @@ python_sqlite3_check() {
( python2_check "$VERSION" && version_gte "$VERSION" "$MIN_PYTHON_2" ) \
|| ( python3_check "$VERSION" && version_gte "$VERSION" "$MIN_PYTHON_3" )
}
is_module_available() {
# Returns 0 is the specified module exists, otherwise returns 1.
# Uses pkgutil rather than pkg_resources or pip's CLI, since pkgutil exists
# in the stdlib, and doesn't depend on the choice of package manager.
local module_name="${1}"
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('${module_name}') else 1)"
}