2016-08-04 29 views
1

我正在編寫一個Python(Python3)應用程序(不是包),並對正確的目錄結構有一些懷疑。目前,我有這樣的:在應用程序中導入模塊,而不是包

myapp/ 
    __init__.py 
    launch.py 
    core/ 
     __init__.py 
     some_core_class.py 
     other_core_class.py 
    gui/ 
     __init__.py 
     some_gui_class.py 
     other_gui_class.py 

我想要的應用程序與python launch.py在我的目錄結構開始從任何地方 - 當然的前面加上正確的路徑,以launch.py,例如python myapps/myapp/launch.py

在我的模塊中,我使用絕對導入,例如在some_core_class.py我寫from myapp.core.other_core_class import OtherCoreClass。我在launch.py中使用了相同的方式,例如, from myapp.core.some_core_class import SomeCoreClass

但隨後在ImportError: No module named 'myapp'python launch.py結果啓動它,例如直接從DIR myapp。我發現我可以通過將launch.py中的輸入更改爲from core.some_core_class import SomeCoreClass來使其工作,但這在我看來並不是正確的絕對輸入,並且與其他文件中的輸入不一致。

解決我的問題的最佳方法是什麼?我想避免將myapp添加到PATH環境變量,這需要用戶或安裝程序進行手動編輯。我應該如何更改我的代碼或導入以使應用程序可以從任何地方啓動?這甚至可能嗎?

回答

0

我剛剛發現,我可以在我launch.py之初前面加上

import os 
import sys 
app_parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.append(app_parent_dir) 

解決它。但這很醜陋,感覺像是一場黑客。一定會有更好的辦法。 Python不應該是醜陋的。等待更好的答案...

+0

似乎沒有其他答案發布到這個問題,所以我認爲這是我會選擇的解決方案。 –

相關問題