2014-09-12 85 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