[英]python import module from same folder but call from parent
我知道有很多類似的問題,但沒有一個能解決我的具體問題:我有以下文件夾結構:
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.