簡體   English   中英

"如何從python中的父目錄導入?"

[英]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.pyimportio.py和調試文件模型。 在這種模式下,Python 解釋器不會把它當作一個包,所以這段代碼( import experiments.ostepop.loggio from ..experiments import poppyfrom ..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.

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