我的应用结构如下:
./mod1/__init__.py
./mod1/utils.py
./mod2/__init__.py
./mod2/test.py
现在在./mod2/test.py我这样做:
from mod1 import utils
但是我得到一个ImportError,没有模块被命名为utils
。怎么了?!
答案 0 :(得分:0)
为了使其正常工作,mod1
和mod2
的父目录必须位于sys.path
,这可能意味着它必须位于环境变量{{1}中}。请参阅the module search path documentation。
一个不需要修改PYTHONPATH
的解决方案是将可执行脚本放在PYTHONPATH
和mod1
的父目录中。
答案 1 :(得分:0)
在sys.path中添加顶级文件夹:
import sys
sys.path.append('path_to_app_folder')
您应该在from mod1 import utils
之前写下这一行。同时添加__init__.py
:
./mod1/__init__.py
./mod1/utils.py
./mod2/__init__.py
./mod2/test.py
__init__.py
您可以使用os.path.abspath从./mod2/test.py
动态获取app文件夹的路径。因此,./mod2/test.py
的代码将如下所示:
import os
import sys
top_level_folder = os.path.abspath('../')
sys.path.append(top_level_folder)
from mod1 import utils