[英]How do i import from parent directory in python?
我正在嘗試從父文件夾導入。 文件夾結構是(忽略名稱)
experiments
__init__.py
poppy.py
ostepop
__ init__.py
importio.py
nopop
__ init__.py
loggio.py
我嘗試將__init__.py
添加到每個文件夾,但沒有任何影響
import experiments.ostepop.loggio
給出錯誤信息:
ModuleNotFoundError:沒有名為“實驗”的模塊
和from ..experiments import poppy
給出
ImportError:嘗試在沒有已知父包的情況下進行相對導入
關於如何從 importio.py 導入 poppy.py 或 loggio.py 的任何提示?
他們已經有很多帖子了,但這對我來說仍然是一個棘手的問題。
所以,雖然我仍然不確定什么是最佳實踐,但無論如何這是我處理這個問題的方式。
在要進行導入的模塊中,添加
import sys
import os
sys.path.append(os.path.join(sys.path[0], '..'))
sys.path[0]
是沒有文件名的模塊的絕對路徑。 當模塊是和不是頂級腳本時,它都可以工作。 如果您不知道什么是頂級腳本以及它與導入機制有什么關系,請閱讀此。
os.path.join
用於處理系統差異。 無論如何, os.path.join(sys.path[0], '..')
將指向父路徑。
sys.path.append
將該父路徑添加到搜索空間。
所以,在你的情況下,將以前的代碼添加到importio.py
,然后你可以做
from nopop import loggio
import poppy
在importio.py
中也是如此。
__init__.py
在此解決方案中根本沒有使用。 您可以刪除它們。 但是我已經看到很多使用__init__.py
。 因此,最佳實踐可能涉及使用它們。
如果我理解正確的話,你要導入poppy.py
從importio.py
和調試文件模型。 在這種模式下,Python 解釋器不會把它當作一個包,所以這段代碼( import experiments.ostepop.loggio
from ..experiments import poppy
和from ..experiments import poppy
)是無效的。
為了解決這個問題,你可以用包模型調試這個腳本,這意味着在終端運行python -m experiments
。 它可能會正確運行。
import os
import sys
# Append parent directory to import path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.