簡體   English   中英

如何解決“ ValueError:嘗試相對頂級包進行相對導入”

[英]How to resolve “ValueError: attempted relative import beyond top-level package”

我的項目存在以下問題,請幫幫我! 這是我的包裹的結構:

/pkg

/pkg/__init__.py
/pkg/sub1/__init__.py
/pkg/sub2/__init__.py

/pkg/sub1/foo1.py
/pkg/sub2/foo2.py

這是foo1.py的實現:

from ..sub2 import foo2

def f():
    print("Hello!")

當我運行foo1時,出現錯誤: ValueError:嘗試了相對於頂級包的相對導入

我可以通過以下調整來解決它:

import sys
import os
sys.path.append(os.path.abspath(os.path.pardir))

from sub2 import foo2
def f():
    print("Hello!")

但是我想知道是否有一種方法可以不導入sys並在其中附加父目錄。

我聽說,例如,如果我有.py文件'/pkg/start.py',它調用了我的foo1模塊,那么兩個點就可以了。 但是,有什么方法可以直接從foo1調用foo2嗎?

在我看來,如果不將pkg添加到我的PATH中,就不可能從sub1的sub2導入模塊。 這是為什么的解釋:

相對導入使用模塊的名稱屬性來確定該模塊在包層次結構中的位置。 如果模塊的名稱不包含任何軟件包信息(例如,將其設置為' main '),則相對導入的解析就好像該模塊是頂級模塊一樣,無論該模塊實際位於文件系統上的哪個位置。

這是python官方網站,在這里進行了解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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