繁体   English   中英

运行nosetests时获取ImportError

[英]Getting ImportError when running nosetests

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

from my_project import main test_main.py

main.py import constants

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

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

如果我将import constants更改为main.py from my_project import constants ,则nosetests可以正常工作。 但是,现在如果我只运行python main.py我会得到ImportError: No module named 'my_project'

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

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

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

现在用python main.py修复你的错误导致导入错误,如果你没有将它包含在你的sys.path那么这是正常的。 有各种各样的方法 -

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

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

相反,使用类似的东西

from . import constants

在main.py中

参见例如PEP 404

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

这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM