setup-python

setup-python V2

GitHub Actions status

This action sets up a Python environment for use in actions by:

What’s new

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', 'pypy2', 'pypy3' ]
    name: Python $ sample
    steps:
      - uses: actions/checkout@v2
      - name: Setup python
        uses: actions/setup-python@v2
        with:
          python-version: $
          architecture: x64
      - run: python my_script.py

Exclude a specific Python version:

jobs:
  build:
    runs-on: $
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: [2.7, 3.6, 3.7, 3.8, pypy2, pypy3]
        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: $
      - 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:
        # 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: $
    - run: python my_script.py

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:

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.

Specifying a Python version

If there is a specific version of Python that you need and you don’t want to worry about any potential breaking changes due to patch updates (going from 3.7.5 to 3.7.6 for example), you should specify the exact major, minor, and patch version (such as 3.7.5)

You should specify only a major and minor version if you are okay with the most recent patch version being used.

Using setup-python with a self hosted runner

If you would like to use setup-python and a self-hosted runner, there are a few extra things you need to make sure are set up so that new versions of Python can be downloaded and configured on your runner.

Windows

Linux

Mac

Using Python without setup-python

setup-python helps keep your dependencies explicit and ensures consistent behavior between different runners. If you use python in a shell on a GitHub hosted runner without setup-python it will default to whatever is in PATH. The default version of Python in PATH vary between runners and can change unexpectedly so we recommend you always use setup-python.

License

The scripts and documentation in this project are released under the MIT License

Contributions

Contributions are welcome! See our Contributor’s Guide