Python单元测试与导入错误

0 投票
2 回答
2066 浏览
提问于 2025-04-21 06:55

我发现了很多类似的帖子,但那些帖子没有解决我的问题。所以我想问一下关于我问题的情况。我的问题出在单元测试和模块导入上。我的项目结构如下。

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 时出现的错误。

撰写回答