如何在Travis-CI中使用Tox测试不同的Python版本
我有一台tox.ini
[tox]
envlist = py{27,33,34,35}
recreate = True
[testenv]
basepython =
py27: python2.7
py33: python3.3
py34: python3.4
py35: python3.5
deps =
-r{toxinidir}/pip-requirements.txt
-r{toxinidir}/pip-requirements-test.txt
commands = py.test它在几个Python版本中运行我的Python单元测试,并且工作得很好。
我想在Travis-CI中设置一个构建,以便在我将更改推送到Github时自动运行它,所以我有一个.travis.yml
language: python
python:
- "2.7"
- "3.3"
- "3.4"
- "3.5"
install:
- pip install tox
script:
- tox从技术上讲,这似乎是可行的,但它会在每个版本的Python...from中冗余地运行我的所有测试。因此,需要5分钟的构建现在需要45分钟。
我尝试从yaml文件中删除python列表,这样Travis将只运行一个Python实例,但这会导致我的Python3.5测试失败,因为找不到3.5解释器。显然,这是一个known limitation,因为Travis-CI不会安装Python3.5,除非你在你的config...but中指定确切的版本,否则它不会为其他版本做这件事。
有什么办法可以解决这个问题吗?
发布于 2016-05-06 07:55:40
为此,我会考虑使用tox-travis。这是一个插件,允许使用Travis CI的多个python版本和Tox的完全可配置性。为此,您将配置.travis.yml文件以使用Python进行测试:
sudo: false
language: python
python:
- "2.7"
- "3.4"
install: pip install tox-travis
script: tox这将运行适当的testenv,它们是默认情况下以py27或py34作为名称因子的任何声明的环境。如果没有与给定因素匹配的环境,将使用Py27或py34作为备用环境。
发布于 2017-09-08 03:45:41
为了获得更好的控制和灵活性,您可以手动定义矩阵,以便Python版本和tox环境相匹配:
language: python
matrix:
include:
- python: 2.7
env: TOXENV=py27
- python: 3.3
env: TOXENV=py33
- python: 3.4
env: TOXENV=py34
- python: 3.5
env: TOXENV=py35
- python: pypy
env: TOXENV=pypy
- env: TOXENV=flake8
install:
- pip install tox
script:
- tox如果不明显,矩阵中的每个条目都从以连字符(-)开头的一行开始。该行后面缩进的任何项目都是该单个项目的附加行。
例如,除了最后一行之外,所有的条目都是两行。最后一项只有一行,不包含python设置;因此,它只使用默认的Python版本(根据Travis文档,Python2.7)。当然,特定的Python版本对于该测试并不重要。如果您想对Python 2和Python 3运行这样的测试(每个版本一次),那么建议使用Travis默认安装的版本(2.7和3.4),这样测试就可以更快地完成,因为它们不需要首先安装非标准的Python版本。例如:
- python: 2.7
env: TOXENV=flake8
- python: 3.4
env: TOXENV=flake8除了Python2.5-3.6版本之外,pypy (矩阵中倒数第二个条目)和pypy3 (未显示)也是如此。
虽然其他各种答案都提供了捷径,最终会给出这个结果,但有时手动定义矩阵会很有帮助。然后,您可以为矩阵中的各个环境定义特定的内容。例如,您可以仅为单个环境定义依赖项,从而避免在每个环境中安装该依赖项所浪费的时间。
- python: 3.5
env: TOXENV=py35
- env: TOXENV=checkspelling
before_install: install_spellchecker.sh
- env: TOXENV=flake8在上面的矩阵中,install_spellchecker.sh脚本只针对相关环境运行,而不针对其他环境运行。使用了before_install设置(而不是install),因为使用install设置会覆盖全局install设置。但是,如果这是您想要的(覆盖/替换全局设置),只需在矩阵条目中重新定义它。毫无疑问,也可以为矩阵中的各个环境定义各种其他设置。
手动定义矩阵可以提供很大的灵活性。但是,如果您不需要增加灵活性,其他答案中的各种快捷方式之一将使您的配置文件更简单,更易于阅读和编辑。
发布于 2017-02-18 07:16:20
Travis为每个测试提供python版本作为TRAVIS_PYTHON_VERSION,但以'3.4'的形式提供,而tox需要'py34'。
如果您不想依赖外部库(tox-travis)来执行转换,您可以手动完成:
language: python
python:
- "2.7"
- "3.3"
- "3.4"
- "3.5"
install:
- pip install tox
script:
- tox -e $(echo py$TRAVIS_PYTHON_VERSION | tr -d .)在搜索引擎中搜索此模式,您会发现许多项目都在使用它。
这也适用于pypy:
tox -e $(echo py$TRAVIS_PYTHON_VERSION | tr -d . | sed -e 's/pypypy/pypy/')来源:flask-mongoengine的.travis.yml。
https://stackoverflow.com/questions/37016688
复制相似问题