This action sets up a Python environment for use in actions by:
- optionally installing and adding to PATH a version of Python that is already installed in the tools cache.
- downloading, installing and adding to PATH an available version of Python from GitHub Releases (actions/python-versions) if a specific version is not available in the tools cache.
- failing if a specific version of Python is not preinstalled or available for download.
- registering problem matchers for error output.
- Ability to download, install and set up Python packages from
actions/python-versionsthat do not come preinstalled on runners.- Allows for pinning to a specific patch version of Python without the worry of it ever being removed or changed.
- Automatic setup and download of Python packages if using a self-hosted runner.
- Support for pre-release versions of Python.
- Support for installing any version of PyPy on-flight
See action.yml
Basic:
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
- run: python my_script.pyMatrix Testing:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ '2.x', '3.x', 'pypy-2.7', 'pypy-3.6', 'pypy-3.7' ]
name: Python ${{ matrix.python-version }} sample
steps:
- uses: actions/checkout@v2
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: x64
- run: python my_script.pyExclude a specific Python version:
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ['2.7', '3.6', '3.7', '3.8', 'pypy-2.7', 'pypy-3.6']
exclude:
- os: macos-latest
python-version: '3.8'
- os: windows-latest
python-version: '3.6'
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
run: python -c "import sys; print(sys.version)"Download and set up a version of Python that does not come preinstalled on an image:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
# in this example, there is a newer version already installed, 3.7.7, so the older version will be downloaded
python-version: ['3.5', '3.6', '3.7.4', '3.8']
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- run: python my_script.pyDownload and set up an accurate pre-release version of Python:
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9.0-beta.4'
- run: python my_script.pyDownload and set up the latest available version of Python (includes both pre-release and stable versions):
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9.0-alpha - 3.9.0' # SemVer's version range syntax
- run: python my_script.pyDownload and set up PyPy:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version:
- 'pypy-3.6' # the latest available version of PyPy that supports Python 3.6
- 'pypy-3.7' # the latest available version of PyPy that supports Python 3.7
- 'pypy-3.7-v7.3.3' # Python 3.7 and PyPy 7.3.3
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- run: python my_script.pyMore details on PyPy syntax and examples of using preview / nightly versions of PyPy can be found in the Available versions of PyPy section.
Check out our detailed guide on using Python with GitHub Actions.
setup-python is able to configure Python from two sources:
- Preinstalled versions of Python in the tools cache on GitHub-hosted runners.
- For detailed information regarding the available versions of Python that are installed see Supported software.
- For every minor version of Python, expect only the latest patch to be preinstalled.
- If
3.8.1is installed for example, and3.8.2is released, expect3.8.1to be removed and replaced by3.8.2in the tools cache. - If the exact patch version doesn't matter to you, specifying just the major and minor version will get you the latest preinstalled patch version. In the previous example, the version spec
3.8will use the3.8.2Python version found in the cache.
- Downloadable Python versions from GitHub Releases (actions/python-versions).
- All available versions are listed in the version-manifest.json file.
- If there is a specific version of Python that is not available, you can open an issue here
setup-python is able to configure PyPy from two sources:
-
Preinstalled versions of PyPy in the tools cache on GitHub-hosted runners
- For detailed information regarding the available versions of PyPy that are installed see Supported software.
- For the latest PyPy release, all versions of Python are cached.
- Cache is updated with a 1-2 week delay. If you specify the PyPy version as
pypy-3.6, the cached version will be used although a newer version is available. If you need to start using the recently released version right after release, you should specify the exact PyPy version usingpypy-3.6-v7.3.3.
-
Downloadable PyPy versions from the official PyPy site.
- All available versions that we can download are listed in versions.json file.
- PyPy < 7.3.3 are not available to install on-flight.
- If some versions are not available, you can open an issue in https://foss.heptapod.net/pypy/pypy/
GitHub hosted runners have a tools cache that comes with a few versions of Python + PyPy already installed. This tools cache helps speed up runs and tool setup by not requiring any new downloads. There is an environment variable called RUNNER_TOOL_CACHE on each runner that describes the location of this tools cache and there is where you will find Python and PyPy installed. setup-python works by taking a specific version of Python or PyPy in this tools cache and adding it to PATH.
| Location | |
|---|---|
| Tool Cache Directory | RUNNER_TOOL_CACHE |
| Python Tool Cache | RUNNER_TOOL_CACHE/Python/* |
| PyPy Tool Cache | RUNNER_TOOL_CACHE/PyPy/* |
GitHub virtual environments are setup in actions/virtual-environments. During the setup, the available versions of Python and PyPy are automatically downloaded, setup and documented.