首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Travis-CI运行Tox

如何使用Travis-CI运行Tox
EN

Stack Overflow用户
提问于 2016-05-04 08:50:20
回答 4查看 8.4K关注 0票数 29

如何在Travis-CI中使用Tox测试不同的Python版本

我有一台tox.ini

代码语言:javascript
复制
[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

代码语言:javascript
复制
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中指定确切的版本,否则它不会为其他版本做这件事。

有什么办法可以解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2016-05-06 07:55:40

为此,我会考虑使用tox-travis。这是一个插件,允许使用Travis CI的多个python版本和Tox的完全可配置性。为此,您将配置.travis.yml文件以使用Python进行测试:

代码语言:javascript
复制
sudo: false
language: python
python:
    - "2.7"
    - "3.4"
install: pip install tox-travis
script: tox

这将运行适当的testenv,它们是默认情况下以py27或py34作为名称因子的任何声明的环境。如果没有与给定因素匹配的环境,将使用Py27或py34作为备用环境。

Further Reading

票数 31
EN

Stack Overflow用户

发布于 2017-09-08 03:45:41

为了获得更好的控制和灵活性,您可以手动定义矩阵,以便Python版本和tox环境相匹配:

代码语言:javascript
复制
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版本。例如:

代码语言:javascript
复制
- python: 2.7
  env: TOXENV=flake8
- python: 3.4
  env: TOXENV=flake8

除了Python2.5-3.6版本之外,pypy (矩阵中倒数第二个条目)和pypy3 (未显示)也是如此。

虽然其他各种答案都提供了捷径,最终会给出这个结果,但有时手动定义矩阵会很有帮助。然后,您可以为矩阵中的各个环境定义特定的内容。例如,您可以仅为单个环境定义依赖项,从而避免在每个环境中安装该依赖项所浪费的时间。

代码语言:javascript
复制
- 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设置。但是,如果这是您想要的(覆盖/替换全局设置),只需在矩阵条目中重新定义它。毫无疑问,也可以为矩阵中的各个环境定义各种其他设置。

手动定义矩阵可以提供很大的灵活性。但是,如果您不需要增加灵活性,其他答案中的各种快捷方式之一将使您的配置文件更简单,更易于阅读和编辑。

票数 25
EN

Stack Overflow用户

发布于 2017-02-18 07:16:20

Travis为每个测试提供python版本作为TRAVIS_PYTHON_VERSION,但以'3.4'的形式提供,而tox需要'py34'

如果您不想依赖外部库(tox-travis)来执行转换,您可以手动完成:

代码语言:javascript
复制
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:

代码语言:javascript
复制
tox -e $(echo py$TRAVIS_PYTHON_VERSION | tr -d . | sed -e 's/pypypy/pypy/')

来源:flask-mongoengine的.travis.yml

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37016688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档