Skip to content

Commit

Permalink
fix: update regex to get supported python versions (#4175)
Browse files Browse the repository at this point in the history
* fix: update regex to get supported python versions

* chore: move version check to bash script
  • Loading branch information
italojohnny authored Oct 19, 2024
1 parent e8e226c commit 7dd85ac
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 18 deletions.
7 changes: 2 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ DOCKERFILE=docker/build_and_push.Dockerfile
DOCKERFILE_BACKEND=docker/build_and_push_backend.Dockerfile
DOCKERFILE_FRONTEND=docker/frontend/build_and_push_frontend.Dockerfile
DOCKER_COMPOSE=docker_example/docker-compose.yml
PYTHON_REQUIRED=$(shell grep '^python[[:space:]]*=' pyproject.toml | sed -n 's/.*"\([^"]*\)".*/\1/p')
PYTHON_REQUIRED=$(shell grep '^requires-python[[:space:]]*=' pyproject.toml | sed -n 's/.*"\([^"]*\)".*/\1/p')
RED=\033[0;31m
NC=\033[0m # No Color
GREEN=\033[0;32m
Expand Down Expand Up @@ -44,10 +44,7 @@ check_tools:
# check if Python version is compatible
check_env: ## check if Python version is compatible
@chmod +x scripts/setup/check_env.sh
@PYTHON_INSTALLED=$$(scripts/setup/check_env.sh python --version 2>&1 | awk '{print $$2}'); \
if ! scripts/setup/check_env.sh python -c "import sys; from packaging.specifiers import SpecifierSet; from packaging.version import Version; sys.exit(not SpecifierSet('$(PYTHON_REQUIRED)').contains(Version('$$PYTHON_INSTALLED')))" 2>/dev/null; then \
echo "$(RED)Error: Python version $$PYTHON_INSTALLED is not compatible with the required version $(PYTHON_REQUIRED). Aborting.$(NC)"; exit 1; \
fi
@scripts/setup/check_env.sh "$(PYTHON_REQUIRED)"

help: ## show this help message
@echo '----'
Expand Down
38 changes: 25 additions & 13 deletions scripts/setup/check_env.sh
Original file line number Diff line number Diff line change
@@ -1,21 +1,33 @@
#!/bin/bash

# Detect if in a virtual environment (venv or virtualenv)
# Detect and use appropriate Python interpreter from virtual environments
if [ -n "$VIRTUAL_ENV" ]; then
exec "$@"
# Detect if in a conda environment
PYTHON_EXEC=python
elif [ -n "$CONDA_DEFAULT_ENV" ]; then
exec conda run -n "$CONDA_DEFAULT_ENV" "$@"
# Detect if in a pipenv environment
PYTHON_EXEC=conda run -n "$CONDA_DEFAULT_ENV" python
elif [ -f "Pipfile" ]; then
exec pipenv run "$@"
# Detect if in a pyenv environment
PYTHON_EXEC=pipenv run python
elif [ -d ".pyenv" ]; then
exec pyenv exec "$@"
# Detect if in a venv environment
elif [ -f "pyvenv.cfg" ]; then
source bin/activate
exec "$@"
PYTHON_EXEC=pyenv exec python
else
exec "$@"
PYTHON_EXEC=python
fi

# Check if Python version is compatible
REQUIRED_VERSION=$1
PYTHON_INSTALLED=$($PYTHON_EXEC -c "import sys; print(sys.version.split()[0])")

echo "Detected Python version: $PYTHON_INSTALLED"

$PYTHON_EXEC -c "
import sys
from distutils.version import LooseVersion
required_version = '$REQUIRED_VERSION'
python_installed = '$PYTHON_INSTALLED'
min_version, max_version = required_version.replace('>=', '').replace('<', '').split(',')
if not (LooseVersion(min_version) <= LooseVersion(python_installed) < LooseVersion(max_version)):
sys.exit(f'Error: Python version {python_installed} is not compatible with required version {required_version}.')
" || exit 1

0 comments on commit 7dd85ac

Please sign in to comment.