我正在努力应对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的模块导入指南(here和here)中描述的方法类似的另一种方法,而无需更改sys.path?
答案 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
。
您正在寻找什么吗?