如何从嵌套模块导入嵌套模块

时间:2014-11-29 19:24:13

标签: python python-2.7

简单的问题,但找不到答案。 我有以下结构:

./lib1:
main.py

./lib2:
__init__.py  utils.py

从根目标开始,我正在运行:

python lib1/main.py

在main.py中我想导入lib2 / utils.py。

添加import lib2 / utils.py失败。 我找到的一个解决方案是添加:

~/tmp/root$ cat lib1/main.py

import sys,os
sys.path.append(os.getcwd())
import lib2.utils

lib2.utils.foo()

这很好,但如果有其他解决方案,我会徘徊。感谢。

2 个答案:

答案 0 :(得分:0)

lib1lib2是否有单独的模块?如果是,则@BrenBarn的注释适用:您需要将顶级目录(包含lib1lib2添加到Python路径(例如,使用PYTHONPATH环境变量或附加到{{1 }})。

如果sys.pathlib1都是一个模块的一部分(即顶层目录中有lib2个文件),您可以使用相对导入(https://docs.python.org/2.5/whatsnew/pep-328.html)。

答案 1 :(得分:0)

您的问题是由使用错误的目录结构引起的。 main.py脚本应与其需要导入的包位于同一顶级目录中。所以结构应该是这样的:

project /
    lib2 /
        __init__.py
        utils.py
        other.py
    main.py

main脚本的目录将始终添加到sys.path的开头,因此这将保证无论脚本在何处,都可以始终直接导入该目录中的所有包。从。执行。

要将utils模块导入main.py(或other.py),您应该执行以下操作:

from lib2 import utils