The python plugin can be used by either Python 2 or Python 3 based parts using a setup.py script for building the project, or using a package published to PyPI, and optionally any of the following:
- A
requirements.txtfile used to import Python modules. - Packages installed directly from pip.
This plugin uses the common plugin key as well as those for sources. For details about these keys, see the reference on parts directives.
Plugin-specific features and syntax are dependent on which base is being used, as outlined below:
See Python applications for a simple example, or search GitHub for projects already using the plugin.
ⓘ This is a snapcraft plugin. See Snapcraft plugins and Supported plugins for further details on how plugins are used.
base: core24 | core22
This plugin uses the following plugin-specific keywords:
python-requirements(list) List of paths to requirements.txt file(s). Paths are relative to the value provided by thesourcekey.python-constraints(list) List of paths to constraint files.python-packages(list, default: [pip, setuptools, wheel])
A list of dependencies to install usingpip. This supports the same syntax as thepip installcommand.
This plugin also interprets these specific build-environment entries:
-
PARTS_PYTHON_INTERPRETER(default: python3) The interpreter binary to search for inPATH. -
PARTS_PYTHON_VENV_ARGSAdditional arguments for venv.
By default, this plugin uses Python from the base snap. If a part using this plugin uses a build-base other than that of the base, or a different interpreter is desired, it must be bundled in the snap (including venv) and must be in PATH.
It is required to bundle python when creating a snap that uses classic confinement, this can be accomplished on Ubuntu by adding stage-packages (i.e.; python3-venv).
Use of python3- in stage-packages will force the inclusion of the python interpreter.
Requires Snapcraft version 7.0+ for core22.
Requires Snapcraft version 8.0+ for core24.
base: core20
This plugin uses the following plugin-specific keywords:
requirements(array) List of paths to requirements.txt file(s). Paths are relative to the value provided by thesourcekey.constraints(string) Path to a constraints file.python-packages(list) A list of dependencies to install usingpip. This supports the same syntax as thepip installcommand.
This plugin also interprets these specific build-environment entries:
-
SNAPCRAFT_PYTHON_INTERPRETER(default: python3) The interpreter binary to search for inPATH. -
SNAPCRAFT_PYTHON_VENV_ARGSAdditional arguments for venv.
By default, this plugin uses Python from the base snap. If a part using this plugin uses a build-base other than that of the base, or a different interpreter is desired, it must be bundled in the snap (including venv) and must be in PATH.
It is required to bundle python when creating a snap that uses classic confinement, this can be accomplished on Ubuntu by adding stage-packages (i.e.; python3-venv).
Use of python3- in stage-packages will force the inclusion of the python interpreter.
Requires Snapcraft version 4.0+.
base: core18 | core
This plugin uses the following plugin-specific keywords:
-
requirements(array) List of paths to requirements.txt file(s). Paths are relative to the value provided by thesourcekey. -
constraints(string) Path to a constraints file -
process-dependency-links(bool; default: false) Enable the processing of dependency links in pip, which allow one project to provide places to look for another project -
python-packages(list) A list of dependencies to install usingpip. This supports the same syntax as thepip installcommand. For example:python-packages: - docopt == 0.6.1 # Install specific versions - git+https://github.com/inuits/mkdocs-factsheet.git # Install from a git repository - https://github.com/cmacmackin/markdown-include/archive/v0.5.1.tar.gz # Install from an archiveSee the
pip installdocs for more information. -
python-version(string; default:python3) The python version to use. Valid options arepython2andpython3
The python plugin also searches <stage-dir>/usr/bin/<python-interpreter> for a Python interpreter with a basename matching python-version in the <stage> directory. If detected, this takes preference and stage-packages will not use its own interpreter.

