2017-04-25 72 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的它。