Python单元测试与导入错误
我发现了很多类似的帖子,但那些帖子没有解决我的问题。所以我想问一下关于我问题的情况。我的问题出在单元测试和模块导入上。我的项目结构如下。
app/
__init__.py
src/
__init__.py
person.py
tests/
__init__.py
test_person.py
我使用pytest来进行单元测试。在tests/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导入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
在运行Python时,确保你当前的工作目录是应用程序的目录,否则from Bio import PDB
可能会因为其他原因而成功。你可以使用os.chdir
命令切换到app
目录,然后再尝试导入,看它是否还能正常工作。
另外,Bio
这个库到底在哪里呢?
编辑:根据你的评论,问题是因为使用了不同版本的Python。
要查看你正在使用哪个版本,可以简单地运行print sys.version
。确保在失败的import
语句之前执行这个命令:
import sys
print sys.version
from Bio import PDB
总之,关于如何更改使用的Python版本的问题,已经在这里回答过了:Linux上有两个版本的Python,如何将2.7设置为默认版本。
0
我找到了答案。主要的问题是,py.test 默认使用的是 Python 2.6,而在执行“from Bio import PDB”时会出现错误。不过,使用 Python 2.7 执行同样的命令就不会出错。为了选择不同版本的 Python,创建了一个独立的 pytest 脚本,并运行它。
py.test --genscript=curpytest
python curpytest
这样就解决了导入 Bio 时出现的错误。