簡體   English   中英

從相鄰模塊導入軟件包在Py2中有效,但在Py3中無效

[英]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 _packagescriptA中可用,但在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.

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