簡體   English   中英

導入錯誤:嘗試在沒有已知父項的情況下進行相對導入 package

[英]Import Error : attempted relative import with no known parent package

你能告訴我如何正確地進行相對導入嗎?

項目結構:

p1
|-  x1
|  |-  __init__.py
|  |-  x1_module1.py
|- x2
   |-  __init__.py
   |-  x2_module1.py

在 x2_modules.py 中

try:
    from p1.x1.x1_module import temp_func
except Exception as e:
    print('Failed "from p1.x1.x1_module import temp_func"')
    print(e)

try:
    from .x1.x1_module import temp_func
except Exception as e:
    print('Failed "from .x1.x1_module import temp_func"')
    print(e)

try:
    from ..x1.x1_module import temp_func
except Exception as e:
    print('Failed "from ..x1.x1_module import temp_func"')
    print(e)

Output:

Failed "from p1.x1.x1_module import temp_func"
No module named 'p1'
Failed "from .x1.x1_module import temp_func"
attempted relative import with no known parent package
Failed "from ..x1.x1_module import temp_func"
attempted relative import with no known parent package
[Finished in 0.2s]

為了更好地理解,請看這張圖片: 在此處輸入圖像描述

項目結構:

p1
|-  x1
|  |-  __init__.py
|  |-  x1_module1.py
|- x2
   |-  __init__.py
   |-  x2_module1.py

編輯:代碼不遵循 PEP-8 且難以閱讀。 因此,我對其進行了優化。

請試試這段代碼:

import sys
import os

PACKAGE_PARENT = '..'

SCRIPT_DIR = os.path.dirname(
    os.path.realpath(
        os.path.join(
            os.getcwd(),
            os.path.expanduser(__file__)
            )
        )
    )

sys.path.append(
    os.path.normpath(
        os.path.join(
            SCRIPT_DIR,
            PACKAGE_PARENT
            )
        )
    )

from x1.x1_module import tempfunction

有用

問候伊沙恩·卡普爾

如果您的 python 腳本是從 p1 目錄調用的,這應該有效:

from x1.x1_module1 import temp_func

要查看 python 在何處搜索您的模塊的列表,請使用以下命令:

import sys
print(sys.path)

sys.path 的第一個條目應該是你的腳本運行的目錄,我假設是 p1

暫無
暫無

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

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