With Travis-CI you can setup a CI build to run against multiple Python versions fairly easily.

.travis.yml

sudo: false language: python python: - 2.7 - 3.6 env: - TOXENV=py-normal install: pip install tox script: tox

tox.ini

[tox] envlist = py{27,36}-normal [testenv] commands = pytest deps = -rtest_requirements.txt

You can achieve something similar with Gitlab CI through the following .gitlab-ci.yml configuration. Your tox.ini can remain the same.

before_script: # Install pyenv - apt-get update - apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev - git clone https://github.com/pyenv/pyenv.git ~/.pyenv - export PYENV_ROOT="$HOME/.pyenv" - export PATH="$PYENV_ROOT/bin:$PATH" - eval "$(pyenv init -)" # Install tox - pip install tox test:python27: script: - pyenv install 2.7.14 - pyenv shell 2.7.14 - tox -e py27-normal test:python36: script: - pyenv install 3.6.4 - pyenv shell 3.6.4 - tox -e py36-normal

The only downside with this is the extra time it takes to install pyenv and the interpreter of choice. A small price to pay to free your project from Github ;)