簡體   English   中英

python 從同一文件夾導入模塊,但從父級調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM