2014-09-12 101 views
0

我發現了很多類似的帖子。但是,這些帖子並未提供我的問題的解決方案。所以我想問一些關於我的問題的問題。我的問題是在單元測試和導入模塊。我的項目有以下層次結構。Python單元測試和導入錯誤

app/ 
    __init__.py 
    src/ 
     __init__.py 
     person.py 
    tests/ 
     __init__.py 
     test_person.py 

我使用pytest進行單元測試。內部測試/ test_person.py

## tests/test_person.py 
from ..src import person 

內的src/person.py

## src/person.py 
from Bio import PDB 

從應用程序/,我運行py.test並得到了錯誤。

from Bio import PDB 
E ImportError: No module named Bio 

我在命令行中進一步測試,檢查是否可以導入生物導入PDB。它可以無任何錯誤地導入。

Python 2.7.4 (default, May 14 2013, 09:41:12) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from Bio import PDB 
>>> 

我不知道什麼是錯誤。有人猜測?

回答

0

我找到了答案。主要的問題是py.test默認使用python2.6,並且在執行「from Bio import PDB」時也會引發錯誤。但是Python2.7在執行相同命令時不會引發任何錯誤。在選擇不同版本的python時作出選擇。獨立pytest腳本使用命令創建,然後運行

py.test --genscript=curpytest 
python curpytest 

它解決了導入Bio的錯誤。

0

運行python時,請確保您的當前工​​作目錄是應用程序目錄,否則from Bio import PDB可能由於其他原因而起作用。您可以使用os.chdir移動到app目錄,然後嘗試導入並查看它是否仍然有效。 另外 - Bio位於哪裏?

編輯:根據您的評論,問題是由使用不同版本的Python引起的。
爲了找出您正在使用的版本,您可以簡單地使用print sys.version。確保做到這一點之前失敗import行:

import sys 
print sys.version 
from Bio import PDB 

總之,改變所使用的Python版本的問題,已經在這裏找到答案:Two versions of python on linux. how to make 2.7 the default

+0

它從不同的目錄工作。 – Exchhattu 2014-09-12 11:41:07

+0

使用命令行時,導致「Bio」成功導入的原因是什麼?它不在上面提到的文件夾中。 – Hetzroni 2014-09-12 12:47:24

+0

更新:在我的系統中,由於程序依賴性,我已經把版本的python - python 2.6和python 2.7。我在/ usr/bin /和python2.7中的/ usr/local/bin中安裝了python2.6。現在,當我使用python2.6時,沒有模塊錯誤出現 - 來自Bio import PDB。由於py.test也安裝在/ user/bin,所以當默認使用py.test時,我認爲它使用/ usr/bin中的python而不是默認路徑/ usr/local/bin。你能告訴我怎麼知道py.test正在使用什麼(python)?我如何在py.test中自定義庫路徑? – Exchhattu 2014-09-13 04:02:33