Python#
Python is detected if any of the following files are found
main.pyrequirements.txtpyproject.tomlPipfile
A venv is created at /opt/venv and PATH is modified to use the venv python binary.
Setup#
The following Python versions are available
2.73.83.93.103.11(Default)3.123.13
The version can be overridden by
- Setting the
NIXPACKS_PYTHON_VERSIONenvironment variable - Setting the version in a
.python-versionfile - Setting the version in a
runtime.txtfile - Setting the version in a
.tool-versionsfile
You also specify the exact poetry, pdm, and uv versions:
- The
NIXPACKS_POETRY_VERSIONenvironment variable orpoetryin a.tool-versionsfile - The
NIXPACKS_PDM_VERSIONenvironment variable - The
NIXPACKS_UV_VERSIONenvironment variable oruvin a.tool-versionsfile
You can specify a particular package manager, to override the lockfile-based choice, by setting the NIXPACKS_PYTHON_PACKAGE_MANAGER environment variable to one of the following:
autoto choose based on the available lockfiles (default)requirementsto install usingpipfromrequirements.txtsetuptoolsto install usingpipwithbuildandsetuptoolspoetryto install usingpoetryfrompoetry.lockpdmto install usingpdmfrompdm.lockuvto install usinguvfromuv.lockpipenvto install withpipenvfromPipfile(if aPipfile.lockis present it will be used)skipto not install a package
Install#
If requirements.txt
pip install -r requirements.txt
If pyproject.toml
pip install --upgrade build setuptools && pip install .
If pyproject.toml (w/ poetry.lock)
poetry install --no-dev --no-interactive --no-ansi
If pyproject.toml (w/ pdm.lock)
pdm install --prod
If Pipfile (w/ Pipfile.lock)
PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
If Pipfile (without Pipfile.lock)
PIPENV_VENV_IN_PROJECT=1 pipenv install --skip-lock
if uv.lock:
uv sync --no-dev --frozen
Start#
if Django Application
python manage.py migrate && gunicorn {app_name}.wsgi
if pyproject.toml
python -m {module}
Otherwise
python main.py
Caching#
These directories are cached between builds
- Install:
~/.cache/pip - Install:
~/.cache/uv - Install:
~/.cache/pdm
Environment Variables#
The following environment variables are set by default:
PYTHONFAULTHANDLER=1 PYTHONUNBUFFERED=1 PYTHONHASHSEED=random PYTHONDONTWRITEBYTECODE=1 PIP_NO_CACHE_DIR=1 PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_DEFAULT_TIMEOUT=100
These can be overwritten by the --env option.