我写了一个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做这样的事情:
pip install -e .
(即将pyota[ccurl]
安装到venv中)。pyota
source dist安装到cwd(source dist包括单元测试)。nosetests pyota/tests
(从本地源dist运行单元测试)。但是,我很想知道如何完成第2步。
如何指示Travis CI通过pip下载源代码分发以便它可以运行单元测试?
答案 0 :(得分:0)
这感觉有点像蛮力解决方案(好吧,让我们在这里诚实;感觉就像我试图解决错误的问题),但这种配置让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。