2017-07-17 105 views
0

我將Python 2.7中編寫的模塊更新到Python 3.6。我對這兩種版本的語言中處理__init__.py的方式感到擔憂。python 3.6 vs python 2.7中的__init__.py

尤其是我__init__.py看起來是這樣的:

from FT_optimize import * 
from FuzzyVars import * 
from FuzzyTree import * 

當我從Python 2.7版軟件包上傳。有這樣的事情:

import FuzzyTree as ft 

我可以訪問在__init__.py中聲明的所有模塊的命名空間。喜歡的東西:

ft.optmize_partition(ft.FuzzyTree) 

但是相同的代碼在Python 3.6報告的錯誤:

AttributeError: module 'FuzzyTree' has no attribute 'optimize_partition' 

任何想法?

從Python文檔中我沒有看到任何標準差異。

+0

是你當前的工作目錄放置'__init__'的目錄還是你安裝了軟件包? – MSeifert

+0

現在我找到了解決方案。看起來,在python3中,即使它們位於同一個目錄中,也必須聲明包中文件的相對路徑。所以我寫道:從.FT_optimize導入*(和其他導入相同),現在一切似乎工作。 –

回答

0

該問題的解決方案(請參閱我的評論)聲明瞭init .py中所有模塊的相對路徑,包括那些位於同一目錄中的模塊。

因此,在上例以下,將初始化的.py現在看起來:

from .FT_optimize import * 
from .FuzzyVars import * 
from .FuzzyTree import * 

(你應該認識到模塊的名稱前的點)。 現在一切正常。