Manage Python versions in non-Python containers
Note
You can now use composable image (BETA) to install runtimes and tools in your application container. To find out more, see the dedicated documentation page.
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:
applications:
# The app's name, which must be unique within the project.
app:
type: 'php:8.3'
variables:
env:
# Update for your desired Python version.
PYTHON_VERSION: "3.11.0"
- Add Pyenv in a
build
hook:
applications:
# The app's name, which must be unique within the project.
app:
type: 'php:8.3'
variables:
env:
# Update for your desired Python version.
PYTHON_VERSION: "3.11.0"
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:
applications:
# The app's name, which must be unique within the project.
app:
type: 'php:8.3'
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.