繁体   English   中英

执行导入的 function 本身时,嵌套 python 模块导入的问题

[英]issue with nested python module importing when executing imported function itself

我相信这个问题一定已经被问过了,但我找不到我的问题的解释,如果它是重复的,对不起。

Folder
├── Generator.py
└── modules
    ├── Function1.py
    └── Subfunction.py

Generator.py 导入 Function1,Function1 导入 Subfunction。 Function1 必须能够作为独立程序和 Generator.py 的导入模块运行

这本身不是问题,因为我使用if __ name__ == "__ main__":来识别调用类型。
但是程序在导入子函数时失败,具体取决于我正在执行的代码。

# Generator.py
    import Function1

# Function1.py
    import Subfunction
    import modules.Subfunction

如果我执行 Function1.py,第一个工作,但如果我运行 Generator.py,它会失败

如果我执行 Generator.py,第二个有效,但如果我运行 Function1.py,它会失败

我认为导入和相对路径与放置代码的模块有关,而不是从顶级调用者的角度来看。 我尝试了import.modules.Function1import.Function1但问题仍然存在。 是否有任何优雅的方法可以为两种用途导入 Subfunction,或者我是否需要在 if name == main下包含 import 或将其捕获在try/except中?

编辑:@Bastien B 的所有代码

如果我执行 Function1.py 本身,它会以这种形式工作。 如果我执行 Generator.py,我得到 ModuleNotFoundError: No module named 'Function1'

# Generator.py
    import Function1
    print(Function1.Function1_return)

# Function1.py
    def Function1_return():
        return Subfunction.Subfunction_return()
    import Subfunction
    if __name__ == '__main__':
        print(Function1_return())

# Subfunction.py
    def Subfunction_return():
        return "this is subfunction"

从我可以看到你的'如果名字......'不是问题。

如果您使用本地 venv,这应该可以正常工作:

生成器.py

from Folder.modules.function1 import Function1_return
print(Function1_return())

函数1.py

from Folder.modules.Subfunction import Subfunction_return

def Function1_return():
    return Subfunction_return()

if __name__ == '__main__':
    print(Function1_return())

子函数.py

def Subfunction_return():
    return "this is subfunction"

根据您的文件结构,您可能需要稍微调整一下

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM