running module within a package getting no module error
本问题已经有最佳答案,请猛点这里访问。
我想这样组织我的python项目:
1 2 3 4 5 6 7 | /proj /test __init__.py test.py /utils __init__.py util.py |
在
但是,当我在
1 2 3 4 5 | $ python test/test.py Traceback (most recent call last): File"test/test.py", line 1, in <module> from utils.util import classA ImportError: No module named utils.util |
但是,如果我做了这些更改,代码运行良好(
1 2 3 4 5 | /proj test.py /utils __init__.py util.py |
我真的希望能够像第一个示例那样组织代码而不出错。我怎样才能做到这一点?
导入工作原理
当您尝试导入模块时,python会在pythonpath中的目录中搜索,以查找您要导入的模块。
因此,在编写
你的案子怎么了
如果将其放入脚本中,可以看到路径上的内容:
1 2 | import sys print sys.path |
打印时,您可能会看到它包含一个空字符串
如何修复
确保
- 将您的入口脚本放在根目录中(如您的示例中所用);或者
- 在运行
python test.py 之前,将根目录添加到PYTHONPATH 环境变量中。 - 在导入任何内容之前,将根目录从
test.py 中添加到sys.path 。
编辑:或者,如Sayan所写:
- 以
python -m test.test 的形式运行(从根目录运行)
您可以将其作为包运行。
1 | python -m test.test |
可以执行模块相关导入。尝试:
1 | from ..utils.util import classA |
在你的