从另一个模块导入时的ImportError

时间:2014-05-03 20:01:10

标签: python

我的应用结构如下:

./mod1/__init__.py
./mod1/utils.py

./mod2/__init__.py
./mod2/test.py

现在在./mod2/test.py我这样做:

from mod1 import utils

但是我得到一个ImportError,没有模块被命名为utils。怎么了?!

2 个答案:

答案 0 :(得分:0)

为了使其正常工作,mod1mod2的父目录必须位于sys.path,这可能意味着它必须位于环境变量{{1}中}。请参阅the module search path documentation

一个不需要修改PYTHONPATH的解决方案是将可执行脚本放在PYTHONPATHmod1的父目录中。

答案 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