Python Unittest和导入错误

时间:2014-09-12 10:26:25

标签: python import pytest unit-testing

我发现有很多类似的帖子。但是,这些帖子没有解决我的问题。所以我想问一下有关我的问题的问题。我的问题是单元测试和导入模块。我的项目有以下层次结构。

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

从app /,我运行py.test并得到错误。

from Bio import PDB
E   ImportError: No module named Bio

我在命令行中进一步测试以检查是否可以导入Bio import 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
>>> 

我不知道错误是什么。有人有猜测吗?

2 个答案:

答案 0 :(得分:0)

运行python时,请确保您当前的工作目录是app目录,否则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

答案 1 :(得分:0)

我找到了答案。主要问题是py.test默认使用python2.6,并且在执行“from Bio import PDB”时也会引发错误。但是,Python2.7在执行相同命令时不会引发任何错误。在选择不同版本的python时做出选择。使用命令创建独立pytest脚本,然后运行

py.test --genscript=curpytest
python curpytest

它解决了导入Bio的错误。