2014-09-26 43 views
6

我想知道是否有人可以解釋這一點。我們有多個具有相同根包的軟件包庫,例如a。我也有包a.b位於X和包裝a.c位於Y. X和Y二者都在我的PYTHONPATH當我做:python導入具有相同根包裝名稱和不同位置的不同子包裝

import a.c 
import a.b 

我得到一個錯誤:"No module named b"。在閱讀後,在我看來,一旦a.c被加載python寫信息a以及當我來做a.b,因爲它已經有關於a的信息已經從來沒有麻煩看到位置X爲a.b並拋出一個錯誤,沒有可以找到名爲b的模塊。

此外,我發現在PYTHONPATH中指定X和Y的順序似乎會影響導入。例如,當我做

PYTHONPATH=$PYTHONPATH:X:Y python 
>>> import a.b # works 
>>> import a.c # fails 

但如果我這樣做

PYTHONPATH=$PYTHONPATH:Y:X python 
>>> import a.b # fails 
>>> import a.c # works 

那是正確的,如果是這樣,我怎麼能解決此問題?有一個通用的模塊根名稱和不同的子軟件包駐留在不同的項目等是很方便的。當然,我從Java的角度來看,你可以做這種重疊。

+0

這種情況無論是在Python 2和3 – Alex 2014-09-29 08:27:31

回答

6

我發現了相關的問題,但失去了鏈接。

的解決方案是包括:

from pkgutil import extend_path 
__path__ = extend_path(__path__, __name__) 

在根__init__.py所有項目。在這種情況下a/__init__.pyBOTH在位置XY。如果你有多層次的子包,你只需要包含一次。

This幫助我和documentationextend_path和信息What is __path__ useful for?

相關問題