This action sets up a Python environment for use in actions by:
actions/python-versions that do not come preinstalled on runners
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
Check out our detailed guide on using Python with GitHub Actions.
setup-python is able to configure Python from two sources:
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.3.8 will use the 3.8.2 Python version found in the 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.
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.
setup-python with a self hosted runnerIf 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.
NT AUTHORITY\NETWORK SERVICE should be sufficient.7zip installed and added to your PATH so that the downloaded versions of Python files can be extracted properly during first-time setup.setup-python fails for a 3.8 version of Python, make sure any previously installed versions are removed by going to “Apps & Features” in the Settings app.actions/python-versions are originally compiled from source in /opt/hostedtoolcache/ with the –enable-shared flag, which makes them non-relocatable.AGENT_TOOLSDIRECTORY and set it to /opt/hostedtoolcache. This controls where the runner downloads and installs tools.
export AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache.env file in the same directory as your runner and to add AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache. This ensures the variable is always set if your runner is configured as a service.hostedtoolcache inside /opt./opt/hostedtoolcache directory. It is not possible to start the Linux runner with sudo and the /opt directory usually requires root privileges to write to. Check the current user and group that the runner belongs to by typing ls -l inside the runners root directory./opt/hostedtoolcache directory using a few techniques:
/opt/hostedtoolcache to be the same as the runners using chown
sudo chown runner-user:runner-group opt/hostedtoolcache/Linux also applies to Mac, just with a different tools cache directory./Users/runner/hostedtoolcacheAGENT_TOOLSDIRECTORY environment variable to /Users/runner/hostedtoolcache./Users/runner/hostedtoolcache so that the runner has write access.setup-pythonsetup-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.
The scripts and documentation in this project are released under the MIT License
Contributions are welcome! See our Contributor’s Guide