2016-08-25 67 views
1

所以我想通過小腳本和web開發移動到桌面應用程序,擴大我的Python的知識和技能,和我有一些無法理解的切入點與setup.py,他們對進口的影響。我也沒有深入瞭解導入如何在Python中工作,這沒有幫助。絕對進口和入口點

我的困惑來自於尋找一個大的桌面應用程序的示例代碼,特別是Deluge,用Python編寫的一個torrenting應用。

看它的代碼,似乎所有進口其自己的模塊是絕對的,例如:

# deluge/core/core.py 
import deluge.common 
from deluge.core.eventmanager import EventManager 

但有趣的是它所有的入口點,如setup.py定義是在程序中也更深:

# setup.py 
entry_points = { 
    'console_scripts': [ 
     'deluge-console = deluge.ui.console:start', 
     'deluge-web = deluge.ui.web:start', 
     'deluged = deluge.core.daemon_entry:start_daemon' 
    ], 
    'gui_scripts': [ 
     'deluge = deluge.ui.ui_entry:start_ui', 
     'deluge-gtk = deluge.ui.gtkui:start' 
    ], 
    'deluge.ui': [ 
     'console = deluge.ui.console:Console', 
     'web = deluge.ui.web:Web', 
     'gtk = deluge.ui.gtkui:Gtk', 
    ], 
} 

從我可以告訴,根據this SO question的答案,這通常是不可能的。要使用絕對導入,程序必須從項目根目錄中的文件開始。

據我瞭解,洪水必須以某種方式改變它的PYTHONPATH,例如sys.path,然而搜索代碼只能找到它的一個實例,但它似乎只與文檔有關,而不是實際的軟件碼。

因此,如何將一個有他們的Python程序模塊中更深層次的切入點,但使用絕對進口項目的根? Deluge似乎已經做到了,但我不知道如何,我想在我的項目中這樣做。

而作爲一個側面的問題,如果你知道用Python編寫的任何其它大型桌面應用程序的,我可以看看爲例子,我喜歡它,如果你告訴我吧:)

乾杯

回答

0

所有這些實際上都在做同樣的事情。

在入口點,我們有這樣一個

'deluge-console = deluge.ui.console:start' 

它正在訪問的頂級包名,洪水線。在那之內,它進入了ui模塊,並且裏面的一個文件叫做console.py。在那個文件中是'start'的定義。安裝後,當從命令行調用時,您將訪問已安裝的python模塊,並最終訪問您要運行的函數。

在自己,我們看到這樣的行的文件。

from deluge.core.eventmanager import EventManager 

它進入已安裝的軟件包洪流。進入模塊'核心',它會找到一個名爲eventmanager.py的文件。在那個文件中,我猜想有一個叫做EventManager的類。

在每一種情況下,你正在訪問安裝的軟件包,並提供有關模塊和子模塊,然後最後你想要的任何實際對象函數類的信息。