Skip to content

About

Set up your GitHub Actions workflow with a specific version of python

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

setup-python V2

GitHub Actions status

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.

What's new

  • Ability to download, install and set up Python packages from actions/python-versions that 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

Usage

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.py

Matrix 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.py

Exclude 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.py

Download 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.py

Download 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.py

Download 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.py

More details on PyPy syntax and examples of using preview / nightly versions of PyPy can be found in the Available versions of PyPy section.

Getting started with Python + Actions

Check out our detailed guide on using Python with GitHub Actions.

Available versions of Python

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.1 is installed for example, and 3.8.2 is released, expect 3.8.1 to be removed and replaced by 3.8.2 in 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.8 will use the 3.8.2 Python 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

Available versions of PyPy

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 using pypy-3.6-v7.3.3.
  • Downloadable PyPy versions from the official PyPy site.

Hosted Tool Cache

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.