【问题标题】:Getting Travis CI to run unit tests for a specific PyPI package让 Travis CI 为特定 PyPI 包运行单元测试
【发布时间】:2017-04-25 11:10:05
【问题描述】:

我编写了一个 C 扩展,旨在提高 Python 库的性能。该扩展是使用 pip 额外安装的:

# Install the library by itself:
pip install pyota

# Install the Python library w/ C extension:
pip install pyota[ccurl]

Python 库更喜欢 C 扩展(如果存在),但它会退回到纯 Python 实现:

# iota/crypto/__init__.py
try:
  from ccurl import *
except ImportError:
  from .pycurl import *

测试 C 扩展的一种简单方法是安装扩展,然后为 Python 库运行单元测试。覆盖范围很广,因此如果单元测试在安装 C 扩展的情况下通过,我可以确信 C 扩展的行为与纯 Python 实现相同。

然而,事实证明这很难实现自动化。

我正试图让 Travis CI 做这样的事情:

  1. pip install -e .(即将pyota[ccurl]安装到venv)。
  2. pyota source dist 安装到 cwd(source dist 包括单元测试)。
  3. nosetests pyota/tests(从本地源 dist 运行单元测试)。

但是,我在弄清楚如何完成第 2 步时遇到了麻烦。

如何指示 Travis CI 通过 pip 下载源代码分发,以便它可以运行单元测试?

【问题讨论】:

    标签: unit-testing pip travis-ci


    【解决方案1】:

    这感觉有点像蛮力解决方案(好吧,老实说;感觉就像我在尝试解决错误的问题),但这种配置让 Travis 下载 Python 库并运行单元测试:

    # .travis.yml
    ...
    script:
      - pip install nose mock
      - 'pip download --no-deps --no-binary :all: --dest pyota --pre pyota'
      - tar -zxf pyota/PyOTA-*.tar.gz -C pyota --strip-components=1
      - nosetests pyota/test
    

    我无法弄清楚如何在 pip download 完成后预测存档的名称,因此我选择了 glob。

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 1970-01-01
      • 2016-08-03
      • 2013-09-04
      • 2016-05-09
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多