【问题标题】:Python Unittest and import errorPython单元测试和导入错误
【发布时间】:2014-09-12 10:26:24
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python import pytest unit-testing


    【解决方案1】:

    在运行 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

    【讨论】:

    • 是什么导致Bio使用命令行导入成功?它不在您上面提到的文件夹列表中。
    • 更新:在我的系统中,由于程序依赖性,我已经放入了 python 版本 - python 2.6 和 python 2.7。我在/usr/bin/ 中安装了python2.6,在/usr/local/bin 中安装了python2.7。现在,当我使用 python2.6 时,没有出现模块错误 - from Bio import PDB。由于 py.test 也安装在 /user/bin 中,所以默认使用 py.test 时,我认为它使用来自 /usr/bin 的 python 而不是我的默认路径 /usr/local/bin。你能告诉我我怎么知道py.test正在使用什么(哪个python)?如何在 py.test 中自定义库路径?
    【解决方案2】:

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

    py.test --genscript=curpytest
    python curpytest
    

    解决了导入Bio的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 2017-12-15
      • 2012-08-08
      • 2019-06-21
      • 2016-01-25
      • 2020-04-16
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多