运行nosetests时遇到ImportError错误

2024-09-27 18:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

试验_主.pyfrom my_project import main

在主.pyimport constants

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

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

如果我在main.py中将import constants改为from my_project import constants,鼻子测试就有效了。但是,现在如果我运行python main.py,我得到ImportError: No module named 'my_project'。在

有人能帮我指出我做错了什么吗?我搜索了不少帖子,但我自己都没能搞定。谢谢。在


Tags: 项目nopytestimportprojectinitmain
2条回答

您正在python3项目中尝试python2样式的相对导入:import constants将在python3中尝试导入constants系统路径水平。在

相反,使用类似

from . import constants

在主.py在

请参见示例PEP 404

In Python 3, implicit relative imports within packages are no longer available - only absolute imports and explicit relative imports are supported.

this SO question。在

在主.py->;import constants是一个隐式相对导入(bad)。它应该改成更常见的from my_project import constants。在

你提到这会让鼻子测试有效。注意:您不需要tests子目录中的__init__.py,事实上,这通常是不可取的。在

现在要修复您的错误,python main.py有一个导入错误,如果您没有将它包含在您的sys.path中,这是正常的。有很多方法可以解决这个问题-

  • 从项目根目录执行(即最上面的my\u project one)
  • 设置PYTHONPATH环境变量
  • 使用setuptools/easy-install等正确打包并安装应用程序

相关问题 更多 >

    热门问题