2017-04-25 78 views
0

我写了一个C扩展,旨在提高Python库的性能。扩展安装为一个额外的使用PIP:让特拉维斯CI为特定的PyPI包运行单元测试

# 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实现完全相同。

但是,这被证明是非常棘手的自动化。

我试图让特拉维斯CI做这样的事情:

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

不过,我有一个时间赫克搞清楚如何实现步骤2

我如何指导特拉维斯CI通过PIP下载一个源代码分发,以便它可以运行单元测试?

回答

0

这感觉有点像一个蛮力的解决方案(好吧,让我们在这里诚实;感觉就像我试图解决错误的问题),但这个配置让特拉维斯下载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的它。

相关问题