我想像这样组织我的python项目:
/proj
/test
__init__.py
test.py
/utils
__init__.py
util.py在test.py内部,我必须从utils.util导入一个类
from utils.util import classA
但是,当我在test.py目录中运行/proj时,会出现一个错误:
$ 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但是,如果我做了这些更改,代码就会运行良好(python test.py)
/proj
test.py
/utils
__init__.py
util.py我非常希望能够像在第一个示例中那样组织我的代码,而不会出现错误。我怎样才能让自己做到这一点?
发布于 2015-11-30 21:20:48
您可以将其作为一个包运行。
python -m test.test发布于 2015-11-30 21:21:31
如何导入工作
当您试图导入一个模块时,Python会通过PYTHONPATH中的目录进行搜索,查找要导入的模块。
因此,在编写from utils.util import classA时,它会查找名为utils的目录,其中包含文件util.py (和__init__.py,但这是另一个问题)。目录utils必须位于您的PYTHONPATH上。
在您的案例中发生了什么,
如果您将其放在脚本中,您可以看到您的路径是什么:
import sys
print sys.path当您打印它时,您可能会看到它保持一个空字符串''。这意味着脚本(test.py)所在的目录。因此,如果utils目录位于与test.py相同的位置,Python将能够找到它。否则就不会了。
如何修复它
确保utils在路上。做这件事有不同的方法。
PYTHONPATH之前将根目录添加到python test.py环境变量sys.path中将根目录从test.py中添加到编辑:或者,正如萨扬所写的:
python -m test.test的形式运行它(从根目录执行此操作)发布于 2015-11-30 21:06:42
您可以进行模块相对导入。尝试:
from ..utils.util import classA在你的test.py里
https://stackoverflow.com/questions/34007825
复制相似问题