python 从同一文件夹导入模块,但从父级调用

标签 python

我知道有很多类似的问题,但没有一个能解决我的具体问题:
我有以下文件夹结构:

project/
       main.py
       /subDirec/
             __init__.py
             function1.py
             function2.py
我想将function2导入function1并从main调用function1。
在function1中我调用
import subDirec.function2 
主要是:
import subDirec.function1
它在我调用 main.py 时有效,但在我调用 function1.py 时无效。
如果我在 function1 中将其更改为:
import function2 
它在 function1 中有效,但不再在 main 中有效。

最佳答案

您可以使用一个技巧来完成这项工作。我不相信这被认为是一种pythonic方式,它在我看来更像是一种解决方法。如果使用不当,可能会产生问题。
想法是将项目及其子目录定义为模块,并将根文件夹项目的路径添加到系统路径中。
您需要创建一个空的 __init__.py在项目和每个子目录中,您要在其他地方加载哪些脚本和函数。
然后的想法是像这样导入:

from folder.subDirec.function1 import function_of_interest
在项目中的每个文件中,您必须使用语法 from folder.subDirect. 导入.
仅当您位于 project 上方的文件夹中时,才能进行此导入。或者如果 project已添加到 PATH。
要将项目路径添加到环境路径,您可以使用:
if __name__ == '__main__':
    import os
    import sys
    base_path = os.path.abspath(__file__).split('project')[0]
    sys.path.append(base_path)
您可以在从 project 导入函数之前将此代码放在每个文件的顶部.
例如:
project/
   main.py
   __init__.py
   /subDirec/
         __init__.py
         plots.py
         utils.py
utils.py我想使用 plots.p1() , 因此在 utils.py我会有:
if __name__ == '__main__':
    import os
    import sys
    base_path = os.path.abspath(__file__).split('project')[0]
    sys.path.append(base_path)

from project.subDirec.plots import p1

p1()

关于python 从同一文件夹导入模块,但从父级调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66549513/

相关文章:

python - python 中大量数字的奇怪行为

python - 如何摆脱逗号分隔字符串中的重复条目

python - 计算文本文件中每个汉字的出现次数

python - 如何将不同值的行连接成新列的单行?

python - 如何获得权重梯度到目标神经元?

Windows 上的 Python 2.7,所有多处理示例的 "assert main_name not in sys.modules, main_name"

具有继承性的 Python 循环导入

python - kv 语言的 Kivy 屏幕管理器引用

多个数组的Python apply_along_axis

python - 谷歌应用引擎: Using Ajax