2009-11-23 25 views
0

我有一個項目,我建立在一個我正在並行構建的庫上。結構如下:從包的{進,出}端導入

project/ 
    main.py 
    MyLibrary/ 
    __init__.py --> empty 
     Module1.py --> contain the class Class1 
     Module2.py --> contain the class Class2 
     Module3.py --> contain the class Class3 
     ... 

我需要導入類class2到Class1.py,如果我做

from Module1 import Class1 

這是確定的。但是,當項目/ main.py我做

from MyLibrary import Module1 

我導入錯誤:沒有模塊名稱模塊1

我可以更換解決這個問題:

from Module1 import Class1 

通過

from .Module1 import Class1 

但是,我再也無法直接運行Module1.py(Python抱怨我正在嘗試做一個親戚對非包裹的影響......)。我需要這個來運行測試。

我怎麼能在這兩種情況下導入該工作?

感謝您的關注!

編輯:第一個描述的解決方案似乎工作在我的Linux桌面上,但不是在我的Windows XP Powerred筆記本電腦。這很奇怪...

+1

有了這些名字,很難說如果你試圖從模塊內部導入模塊(最佳實踐)或類,並且你得到了什麼。此外,除了短暫提及Class2之外,所有地方都使用「Class1」,這是令人頭痛的事情。請做一些合理的重命名(例如模塊Mod1,Mod2!),並澄清哪些是你想要導入的,從哪裏,在sys.path上什麼,以及當前目錄。 – 2009-11-23 16:11:48

+0

你正在寫你想要「將Class2導入Class1.py」。但是,然後你嘗試通過'從Class1 import Class1'實現。這根本不符合邏輯。 – ndim 2009-11-23 19:26:31

+0

我不好,我改變了模塊名稱以獲得更好的清晰度(我希望)。 – thomas 2009-11-23 22:10:37

回答

1

您遇到的行爲(導入在一臺機器上正常工作而不是另一臺機器上)經常發生,因爲您在一個系統上有多個名爲MyLibrary的軟件包,而您的PYTHONPATH不會列出。 「第一。

爲了測試是否是這個問題,在項目目錄,運行Python做

>>> import MyLibrary 
>>> print MyLibrary 

,看看路徑在MyLibrary與您的期望。如果沒有,請調整您的PYTHONPATH和/或刪除過時的軟件包版本。

避免這種問題的常用方法是使用virtualenv創建一個獨立的Python環境。