如何让 Travis CI 安装 Python 在 tests_require 中声明的依赖项?

How to make Travis CI to install Python dependencies declared in tests_require?

我有 Python 个包裹 setup.py。它具有在 install_requires 中声明的常规依赖项和在 tests_require 中声明的开发依赖项,例如flake8.

我认为 pip install -e . 或 运行 python setup.py test 也会安装我的开发依赖项,它们将可用。但是,显然它们不是,我很难正确设置我的 Travis CI 构建。

install:
  - "pip install -e ."
script:
  - "python setup.py test"
  - "flake8"

如上配置的构建将失败,因为找不到 flake8 作为有效命令。我还尝试从 python setup.py test 命令内部调用 flake8(通过 subprocess),但也没有成功。

我也讨厌 flake8 不能轻易成为 python setup.py test 命令的组成部分,但那是另一回事了。

我更喜欢将大部分配置保留在 tox.ini 中并依靠它来安装 运行 什么是 运行。对于测试,我使用 pytest(可以修改解决方案以轻松使用其他测试框架)。

使用了以下文件:

  • tox.ini: 自动化测试
  • .travis.yml:Travis 的说明
  • setup.py: 安装测试包的安装脚本
  • test_requirements.txt: 测试要求列表

tox.ini

[tox]
envlist = py{26,27,33,34}

[testenv]
commands =
    py.test -sv tests []
deps =
    -rtest-requirements.txt

.travis.yml

sudo: false
language: python
python:
    - 2.6
    - 2.7
    - 3.3
    - 3.4
install:
    - pip install tox-travis
script:
 - tox

test_requirements.txt

只是普通的需求文件,其中包含您需要的一切(例如 flake8pytest 和其他依赖项)

您可能会在 https://github.com/vlcinsky/awslogs/tree/pbr-setup.py

看到示例

它在 pbrcoveragecoverall 中使用的事实与我的回答无关(无论是否使用 pbr,它都适用)。

更直接的回答是pip install不会安装tests_require,故意把运行时间要求和测试要求分开。 python setup.py test 为 运行 中的测试创建一个类似 virtualenv 的环境,然后取消执行此操作。 flake8 因此一旦完成就无法使用。

Flake8 有 setuptools integration and also integrates with pytest if you use that. pytest itself also integrates with setuptools.