Manage Python versions in non-Python containers
You may need to use a specific version of Python that isn’t available in an app container for a different language. For example, a container might have a long-term support version, while you want the latest version.
In such cases, use the Pyenv version manager to install the specific version you want to use.
- Add your target Python version as a variable:
.platform.app.yaml
variables:
env:
# Update for your desired Python version.
PYTHON_VERSION: "3.11.0"
- Add Pyenv in a
build
hook:
.platform.app.yaml
hooks:
build: |
# Exit the hook on any failure
set -e
# Clone Pyenv to the build cache if not present
if [ ! -d "$PLATFORM_CACHE_DIR/.pyenv" ]; then
mkdir -p $PLATFORM_CACHE_DIR/.pyenv
git clone https://github.com/pyenv/pyenv.git $PLATFORM_CACHE_DIR/.pyenv
fi
# Pyenv environment variables
export PYENV_ROOT="$PLATFORM_CACHE_DIR/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# Initialize Pyenv
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init --path)"
fi
# Install desired Python version
mkdir -p $PLATFORM_CACHE_DIR/.pyenv/versions
if [ ! -d "$PLATFORM_CACHE_DIR/.pyenv/versions/$PYTHON_VERSION" ]; then
pyenv install $PYTHON_VERSION
fi
# Set global Python version
pyenv global $PYTHON_VERSION
Now your build hook can use the specified version of Python.
You can verify this by running python --version
.
If you want this Python version to be available in the runtime environment, follow these steps:
- Copy Pyenv to your runtime environment at the end of your build hook:
.platform.app.yaml
hooks:
build: |
...
# Copy Pyenv directory to runtime directory
cp -R $PLATFORM_CACHE_DIR/.pyenv $PLATFORM_APP_DIR
# Rehash Pyenv for new (runtime) location
PYENV_ROOT="$PLATFORM_APP_DIR/.pyenv" $PLATFORM_APP_DIR/.pyenv/bin/pyenv rehash
-
Create an
.environment
file:touch .environment
-
Update the PATH for the runtime environment:
.environmentexport PATH=/app/.pyenv/bin:/app/.pyenv/shims:$PATH
Now the specified Python version is used in the runtime environment.