'How do I specify tox + python version specific requirements
Currently I have the following:
[gh-actions]
python =
3.7: py37
3.8: py38
3.9: py39
3.10: py310
pypy-3.7: pypy3
pypy-3.8: pypy3
[tox]
minversion = 1.9
envlist =
lint
py{37,38,39,py3}-django22-{sqlite,postgres}
py{37,38,39,310,py3}-django32-{sqlite,postgres}
py{38,39,310,py3}-django40-{sqlite,postgres}
py310-djangomain-{sqlite,postgres}
docs
examples
linkcheck
toxworkdir = {env:TOX_WORKDIR:.tox}
[testenv]
deps =
Pillow
SQLAlchemy
mongoengine
django22: Django>=2.2,<2.3
django32: Django>=3.2,<3.3
django40: Django>=4.0,<4.1
djangomain: https://github.com/django/django/archive/main.tar.gz
py{37,38,39,310}-django{22,32,40,main}-postgres: psycopg2-binary
py{py3}-django{22,32,40,main}-postgres: psycopg2cffi
I need to install a different psycopg2
depending on cpython
vs pypy
. I've tried all kinds of combinations, and nothing, it all ends in failure. I can't get any of the *-postgres
envs to install.
What I'm doing wrong?
Solution 1:[1]
The issue is that you do not run the correct environments in your GitHub Actions.
For example. In your tox.ini
you create an env with the name:
py37-django22-alchemy-mongoengine-postgres
Then you define the requirements as following:
py{37,38,39,310}-postgres: psycopg2-binary
Which means - install psycopg2-binary
when the env name contains the factors py37
+ postgres
. This matches the above env! So far so good.
But in your gha your run:
- python-version: "3.7"
tox-environment: django22-postgres
... which does not contain the py37
factor - so no match - no installation.
The sqlite
tests succeed as it sqlite
comes along with Python.
I would suggest that you have a look at the django projects in the jazzband github organization. They all are heavy use of tox factors (the parts separated by dashes) and they also use gha - mostly via https://github.com/ymyzk/tox-gh-actions which I would recommend, too.
Basically you just run tox
on gha and let the plugin do the heavy lifting of matching Python environments from tox to github.
Disclaimer: I am one of the tox maintainers and you earn a prize for the most complex factor setup I have ever seen :-)
Solution 2:[2]
The issue was never tox
or tox
's configuration.
The issue was github actions
, when you use tox-environment
or python-version
+ tox-environment
, tox-gh-actions
won't parse it correctly. Causing it to never match.
This is what I removed. This is what tox.ini looks like and what github actions looks like [and line 47]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Javier Buzzi |