[英]Import package from adjacent module works in Py2 but not in Py3
我仍然習慣於構造python項目和相對導入,我以為我最了解相對導入,直到在Py3上進行測試時遇到一個問題。
我有一個結構如下的項目:
scriptA.py
package/__init__.py
scriptB.py
scriptC.py
__init.py__
包含以下內容:
from scriptB import functionB
from scriptC import functionC
在scriptA
import package as _package
在scriptA
中可用,但在Py3.5上失敗,並顯示錯誤ImportError: No module named 'scriptB'
。
如何以與Py2和3兼容的方式導入package
? 為什么有什么不同?
我嘗試import .package as _package
但這似乎並沒有改變任何內容(仍在確定何時使用.
和..
...
沒有名為“ scriptB”的模塊
看起來像路徑錯誤。 檢查您的路徑語句。 通過在開始菜單搜索欄中鍵入“ system”,可以訪問Windows中的path語句。 從那里您可以訪問“環境變量”,其中之一是“路徑”語句。 在這里,您可以看到Python腳本允許訪問的不同目錄。 確保在那里列出了Python 3.x目錄和Python 3.x / scripts目錄。
path語句中列出的文件有點像程序中的全局變量。 如果Python 2和Python 3在其目錄中具有相同的文件名,則可以訪問不兼容的文件。 我讀到有一個python啟動器可以解決這個問題,因此您可以在同一台計算機上運行多個版本的python。 現在,我將通過-將path語句復制到備份文件,然后-刪除對python 2.x的引用,-reboot-運行程序來測試是否是您的問題。 如果要運行多個版本的python,請復制原始path語句,然后安裝python啟動器。
因此,問題在於__init__.py
中的導入應該是相對導入,即:
from .scriptB import functionB
from .scriptC import functionC
我想這是導入模塊和python包之間的區別之一。 似乎在Py3.5中,需要顯式完成相對導入,因此引發了錯誤。 這是我的解釋。 不幸的是,我在問題中提出的結構與我所遇到的問題不夠接近,因此無法解決問題……但是,仍歡迎對此進行更詳細的(可能是准確的)答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.