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:
.platform.app.yamlvariables: env: # Update for your desired Python version. PYTHON_VERSION: "3.11.0"
-
Add Pyenv in a
build
hook:.platform.app.yamlhooks: 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.yamlhooks: 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.