2013-10-23 44 views
3

我有一個混合的Python/C++庫,其中測試文件混合在相同目錄中的源文件中。佈局看起來像強制py.test使用已安裝版本的模塊

/home/irving/geode 
    geode 
    __init__.py 
    vector 
     __init__.py 
     test_vector.py 
     ... 
    ... 

不幸的是,由於缺少.so擴展模塊,因此該庫不可用。 問題:我可以使py.test始終使用已安裝的版本,即使從/home/irving/geode或子目錄運行?

測試文件有from __future__ import absolute_import,如果直接作爲腳本執行,則運行正常。例如,如果我這樣做

cd geode/vector 
./test_vector.py 

這確實import geode,發現已安裝的版本。但是,如果我運行geode/vector中的py.test,它會找到本地副本geode,然後死亡。

回答

7

我認爲你有兩個選擇:

  1. 運行py.test --pyargs geode.vector.test_vector使pytest interpretet參數作爲導入路徑,得出從它的文件系統路徑。這應該對安裝的版本運行測試。

  2. 將測試轉移到tests目錄中,但沒有__init__.py文件。這樣,您需要pip install -e .才能正常工作,或者可以執行python setup.py installpy.test tests以針對安裝的版本運行測試。

+0

事實上,沒有一個'__init __。py',setuptools的找不到test目錄作爲一個包,如果你正在使用''find_packages在我的經驗()。因此,'tests'目錄不會在你的'site-packages'上傳遞。我選擇包含'__init __。py',它可以與'py.test --pyargs mypackage'完美協作。 – kirpit

相關問題