2012-10-17 39 views
0

在我的項目中,我想更改主包名。在python中更改主包名

我有一個目錄結構是這樣的:

hallo/sub 
hallo/foo 
hallo/bar 

我想例如更改主名稱爲「再見」:

goodbye/sub 
goodbye/foo 
goodbye/bar 

但作爲導致新的名字總是拒絕!例如,如果我輸入

import goodbye.sub.utils as utils

它返回錯誤

ImportError: No module named sub.utils 

並明確了舊的名字都不作品。 文件__init__.py被寫入所有子目錄!

我試圖刪除所有* .pyc文件和緩存目錄,我試圖重新克隆另一個目錄中的項目,但沒有,新名稱總是被拒絕!

我在* nix下使用python2,我從來沒有在windows下移動。

有些想法?

編輯: 老字號工程完美:

import hallo.sub.utils as utils 

沒有任何錯誤,一貫致力於,問題是名稱的改變。

+3

聽起來好像你有另一個名爲'goodbye'的模塊。添加一個'import goodbye;打印再見.__ file__'到您的腳本,以找出導入的內容。 –

+0

我無法重現這一點。查看我的[會話日誌](http://pastebin.com/ArL9WYwP)。 – 2012-10-17 09:34:28

+0

你有權利,我已經對包的命名做了一些混淆。 TNX。 – Giggi

回答

0

對於從外部進口的產品,請檢查__init__.py的內容是否存在可能導致問題的變量 - 如__all__

此外,典型的成語是:

from hallo.sub import utils  #tyically this 
import hallo.sub.utils as utils #instead of this 

我無法想象爲什麼會有所作爲,但蟒蛇偶爾有愚蠢的錯誤。

對於從包裝內進口,您可以改爲使用relative imports。在您hallo包,你可以改變這一點:

import hallo.sub as sub 
import hallo.sub.utils as utils 

這個

from . import sub 
from .sub import utils 

然後,它並不重要外包裝被調用。

+0

這不是OP的問題。這並不是說在包內使用舊名稱,而是從包外*導入新名稱失敗。 –

+0

好的,這是一個可能的解決方案。但全球進口與'hallo'一起工作,而不是'再見'。 – Giggi

+0

我不認爲「蟒偶爾有愚蠢的錯誤」是真實的。通常是那些使用它的人不能完全理解他們在做什麼(例如,相對進口/循環進口等)。 顯然有錯誤,但這是複雜的軟件不可避免的。 – Bakuriu