簡體   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