运行nosetests时遇到ImportError

时间:2015-11-17 18:10:25

标签: python python-3.x nose nosetests

my_project
    -my_project
        - __init__.py
        - main.py
        - constants.py
        -test
            - __init__.py
            - test_main.py

test_main.py from my_project import main

main.py import constants

当我在my_project中运行nosetests时,我最终获得了ImportError: No module named 'constants'

两个__init__.py个文件都是空白的。

如果我在import constants中将from my_project import constants更改为main.py,则可以进行测试。但是,现在,如果我只是运行python main.py,我会获得ImportError: No module named 'my_project'

有人能帮助我指出我做错了什么吗?我搜索过很多帖子,但我自己无法解决这个问题。感谢。

2 个答案:

答案 0 :(得分:1)

在main.py中 - > import constants是隐式相对导入(错误)。它应该更改为更常见的from my_project import constants

你提到这使鼻子测试工作。注意:您在测试子目录中不需要__init__.py,实际上通常不鼓励这样做。

现在要修复错误,python main.py导致导入错误,如果您没有将其包含在sys.path中,这是正常现象。有各种各样的方法 -

  • 从项目根目录(即最上面的my_project)执行
  • 设置PYTHONPATH环境变量
  • 使用setuptools / easy_install等正确打包并安装您的应用

答案 1 :(得分:1)

您正在Python 3项目中尝试以Python 2样式进行相对导入:{3}将在Python 3中尝试在主sys.path级别导入import constants。 / p>

相反,请使用类似

的内容
constants
在main.py中

参见例如PEP 404

  

在Python 3中,包中的隐式相对导入不再存在   可用 - 仅限绝对导入和显式相对导入   支撑。

this SO question