从一个子模块导入到另一个子模块

时间:2018-12-06 08:55:14

标签: python python-3.x import

我正在努力应对python的导入。

我有我的python项目存储库,在其中有或多或少的独立程序和工具的集合。有几个子文件夹包含单个脚本和程序。有些也可以用作其他脚本的帮助程序。假设我的文件夹结构如下:

root
   __init__.py
   prog1.py
   prog2.py
   imaging
        __init__.py
        filter1.py
        detect_edges.py
   data_tools
        __init__.py
        floating_mean.py
        unify_data_sources.py
        prog3.py

现在假设我想直接使用prog3.py,但需要致电filter1.py。如何将其导入prog3.py

我设法导入它的唯一方法是添加需要修改sys.path的路径。

import sys
sys.path.append("../imaging/")
from filter1 import filter1

据我所知,模块的相对位置是否存在与python的模块导入指南(herehere)中描述的方法类似的另一种方法,而无需更改sys.path?

1 个答案:

答案 0 :(得分:0)

假设您需要调用filter1.py来导入共享函数或类,我将使用python教程中所述的相对导入。

filter1.py

def some_shared_func1():
    pass

def some_shared_func2(): 
    pass

prog3.py

from ..imaging.filter1 import some_shared_func1, some_shared_func2
# filter1 is reached from prog3 by go two levels up then one level down to `imaging` folder.

if __name__ == "__main__":
    # Do something with some_shared_func1
    # Do something with some_shared_func2
    pass

然后我将使用带有-m参数的prog3.py来解析相对导入但不扩展:

python -m root.data_tools.prog3

当前目录必须是包含root的目录(或定义为PYTHONPATH变量)。

我不修改sys.path

您正在寻找什么吗?