簡體   English   中英

如何正確導入需要另一個模塊運行的模塊?

[英]how to properly import a module which need another module to run?

我遇到了一個名為no module named XX. 我的項目文件組織如下:

-------A.py
          |
          B-----__init__.py        wrote: from .C import C
                        |
                        C.py
                        |​
                        D -----__init__.py           wrote: from .E import E
                                         |
                                         E.py

在 A.py 中,我需要從 C.py 導入 class C。 但是 class C 需要使用 class E(in E.py)來運行

在 A.py 中,我寫了import B.C

在 C.py 中,我寫了import DE

當我在 A.py 中運行測試時,它給出了錯誤: No module named 'D'但是如果我測試 C.py,則完全沒有問題。

誰能告訴我為什么以及如何解決它?

當您嘗試運行A.py時,它會失敗,因為 Python 解釋器(運行 Python 腳本的程序)找不到D ZEFE90A8E604A7C840E88D03A67F6B7D8。

但是,當您運行C.py時,解釋器確實找到了D package。 這是因為您正在運行的腳本 ( C.py ) 與D package 位於同一目錄/文件夾中。

Python Docs中的詳細解釋:

當導入名為spam的模塊時,解釋器首先搜索具有該名稱的內置模塊。 如果未找到,它會在變量sys.path給出的目錄列表中搜索名為spam.py的文件。 sys.path從這些位置初始化:

  • 包含輸入腳本的目錄(或未指定文件時的當前目錄)。

  • PYTHONPATH(目錄名稱列表,語法與 shell 變量 PATH 相同)。

  • 依賴於安裝的默認值(按照慣例,包括一個站點包目錄,由站點模塊處理)。

一個快速的解決方法是在C.py中使用相對導入:

from .D import E

暫無
暫無

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

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