我正在使用Python 2.6。我是Python編程的新手,所以請原諒我的無知。我有多個包的多個目錄。我的目錄結構如下所示:Python導入文件夾
/disconfig
__init__.py
/LLE
__init__.py
/DIS
__init__.py
/Data
__init__.py
/common
__init__.py
/LLE
__init__.py
我需要能夠導入兩個LLE目錄才能使程序正常工作。我無法在PYTHONPATH中添加disconfig或common,因爲它們都有一個LLE目錄。當我導入LLE時,它只吸引其中一個。我試着這樣做:
import disconfig.LLE
它錯誤說:
Traceback (most recent call last):
File "./disconfig.py", line 9, in <module>
import disconfig.LLE
File "./disconfig.py", line 9, in <module>
import disconfig.LLE
ImportError: No module named LLE
我已經試過:
import disconfig
這個工作,但是當我嘗試從一箇中運行代碼模塊:
LLE.DIS.runDisFunc
它回來說
name 'LLE' not defined
如果我嘗試:
disconfig.LLE.DIS.runDisFunc
它說有錯誤:
'module' object has no attribute 'LLE'
我已經工作了這麼久,不能環繞它我的大腦。有什麼建議麼?
編輯: 也許還有一件事要提。這些目錄中的文件由ZeroC的slice2py生成。他們將所有生成的.py文件放在頂層目錄中(所以在/ disconfig下)。 LLE目錄中有init .py,其中包含所有生成的.py文件以及「導入DIS」和「導入數據」的導入。然後在DIS和Data中,有init .py文件,其中包含特定於這些模塊的導入。因此,更徹底,它看起來像:
/disconfig
__init__.py
Attribute_ice.py
DIS_ice.py
DISControl_ice.py
/LLE
__init__.py
/DIS
__init__.py
/Data
__init__.py
如果我改變從disconfig到MDIS(的建議)模塊,並做
import MDIS
我得到
Traceback (most recent call last):
File "./disconfig", line 9, in <module>
import MDIS
File "/oudvmt/python/MDIS/__init__.py", line 18, in <module>
import LLE
File "/oudvmt/python/MDIS/LLE/__init__.py", line 4, in <module>
import Attribute_ice
ImportError: No module named Attribute_ice
如果我嘗試
import MDIS.LLE
我得到
Traceback (most recent call last):
File "./disconfig", line 9, in <module>
import MDIS.LLE
File "/oudvmt/python/MDIS/__init__.py", line 18, in <module>
import LLE
File "/oudvmt/python/MDIS/LLE/__init__.py", line 4, in <module>
import Attribute_ice
ImportError: No module named Attribute_ice
我已經試過產生.py文件移動到子目錄,但導致其他的問題,因爲在/ DIS文件依賴於文件/數據(DIS_ice.py進口Attribute_ice.py,這是LLE/Data的一部分)。如果我將它們分開,我會得到ImportErrors。
更多編輯: 我加了所有的。py文件複製到我的init .py,並將其從子目錄中的init .py中刪除。現在,我只使用「導入MDIS」導致了更多的導入錯誤。但是,現在當我嘗試我的功能
disadmin = MDIS.LLE.DIS.DISAdminPrx.checkedCast()
我得到
'module' object has no attribute 'DISAdminPrx'
在DISAdmin_ice.py,有一個叫DISAdminPrx類,它確實有checkedCast時的方法。我試圖
disadmin = DISAdmin_ice.DISAdminPrx.checkedCast()
和
disadmin = MDIS.LLE.DIS.DISAdmin_ice.DISAdminPrx.checkedCast()
和任何其他組合我能想到的。
再次編輯 看起來這是我從ZeroC使用的python轉換器的問題。他們正在幫我解決它。謝謝您的幫助!
運行'import disconfig'後,dir(disconfig)'的輸出是什麼? –
['Ice','__builtins__','__doc__','__file__','__name__','__package__','cgi','cgitb','disconfig','escape','os','sys', 'traceback'] –