2017-01-19 71 views
15

我正在使用Python的包。我使用virtualenv。我在virtualenv的.pth路徑中設置了模塊根目錄的路徑,這樣我可以在開發代碼的同時導入包的模塊並進行測試(問題1:是否是一種好的方法?)。這工作正常(這裏有一個例子,這是我想要的行爲):pytest無法導入模塊,而python可以

(VEnvTestRc) [email protected]:~/Desktop/GitFolders/rc$ python 
Python 2.7.12 (default, Jul 1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from rc import ns 
>>> exit() 
(VEnvTestRc) [email protected]:~/Desktop/GitFolders/rc$ python tests/test_ns.py 
issued command: echo hello 
command output: hello 

但是,如果我嘗試使用PyTest,我得到一些進口的錯誤信息:

(VEnvTestRc) [email protected]:~/Desktop/GitFolders/rc$ pytest 
=========================================== test session starts ============================================ 
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.31, pluggy-0.4.0 
rootdir: /home/zz/Desktop/GitFolders/rc, inifile: 
collected 0 items/1 errors 

================================================== ERRORS ================================================== 
________________________________ ERROR collecting tests/test_ns.py ________________________________ 
ImportError while importing test module '/home/zz/Desktop/GitFolders/rc/tests/test_ns.py'. 
Hint: make sure your test modules/packages have valid Python names. 
Traceback: 
tests/test_ns.py:2: in <module> 
    from rc import ns 
E ImportError: cannot import name ns 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
========================================= 1 error in 0.09 seconds ========================================== 
(VEnvTestRc) [email protected]:~/Desktop/GitFolders/rc$ which pytest 
/home/zz/Desktop/VirtualEnvs/VEnvTestRc/bin/pytest 

我是有點困惑,它看起來像這樣表示一個導入錯誤,但是Python很好,所以爲什麼PyTest特別存在問題?對於原因/補救措施的任何建議(問題2)?我用Google搜索並堆棧溢出PyTest的'ImportError:can not import'錯誤,但是我得到的匹配與缺少python路徑和補救措施有關,這似乎不是問題。有什麼建議麼?

回答

22

找到了答案:

切勿將如果您計劃使用pytest,則在包含TESTS的文件夾中輸入__init__.py文件。我有一個這樣的文件,刪除它解決了這個問題。

這實際上被埋在了對第二個答案PATH issue with pytest 'ImportError: No module named YadaYadaYada'的評論中,所以我沒有看到它,希望它在這裏獲得更多的可見性。

+2

有趣。我有同樣的問題,我不得不將__init__.py添加到我的測試文件夾。 –

0

Pytest可能並不是將Python作爲Python模塊讀取包(可能是由於路徑問題)。嘗試更改pytest腳本的目錄或將模塊明確添加到您的PYTHONPATH中。

也可能是您的機器上安裝了兩個版本的Python。檢查你的python pytest源代碼以及你運行的python shell。如果它們是不同的(即Python的2比3),使用source activate以確保您正在運行安裝了相同的蟒蛇該模塊安裝在pytest

3

我有同樣的問題,但另一個原因,而不是提到的那些:

我py.test全球的裝機量,而軟件被安裝在虛擬環境中。

解決方案是在虛擬環境中安裝pytest。 (如果你的shell哈希可執行文件,如擊不中,使用hash -r,或使用的完整路徑py.test

+2

剛剛意識到我有同樣的鬼祟問題,使用anaconda。我忘了在'conda'創建的virtualenv中添加'pytest',然而'pytest'在anaconda的根環境中可用。因此可以找到pytest **,但不能在環境中安裝任何軟件包。 – Overdrivr

0

我有一個類似的問題,確切的同樣的錯誤,但不同的原因。我正在運行測試代碼,但對模塊的舊版本。在我的代碼的以前版本中,有一類存在,而另一類沒有。更新我的代碼後,我應該運行以下內容來安裝它。

sudo pip install ./ --upgrade

在安裝運行pytest更新模塊產生正確的結果(因爲我使用正確的代碼鹼)。