2012-06-30 104 views
1

我有一個Python應用程序,並且我有一個關於打包的問題,​​這不是一個真正的distutils問題,而是一個如何組織和設置應用程序的問題,因此很容易從命令行使用。組織一個Python應用程序

假定應用程序包含一個包,並承擔,我並不一定要讓它的distutils包的時刻(雖然我可以勸阻。)

程序本身作爲一個SNMP子代理是使用pass_persist通過Net-SNMP運行。這對於這個問題並不是特別重要,它只是意味着整個程序是可執行的,並且讀取標準輸入和標準輸出的響應。

進一步假設該代理在或多或少規範Python的方式構成

agent 
     __init__.py 
     main.py 
     <other modules at the same level> 

main.py是一個簡單的程序類似

#!/usr/bin/env python 
import sys 
def main(argv): 
    <initialize the environment, input output, logging and so on> 
    while <not done>: 
     <process an input> 
    <clean up and terminate> 

if __name__ == '__main__': 
    main(sys.argv) 

有似乎只是幾個方面,這可能是有組織地運行:

將該軟件包置於站點包中的某個位置,並在PATH中有一個頂級程序,如

#!/usr/bin/env python 
from agent import main 
main(sys.argv) 

把包目錄的地方,並通過使用

/path/to/directory/agent/main.py 

(與bumpo版本是把代理的目錄路徑的地方,所以你可以只運行main.py

運行或者是更多的Pythonic和酷的方法,讓我安裝代碼並直接將某些東西放到我不知道的路徑中。

谷歌搜索沒有什麼幫助,我懷疑這是那些「太愚蠢回答」的問題之一。不幸的是,我很愚蠢,不知道這一點。

回答

1

「把軟件包目錄放在某個地方」是最重要的。剩下的就是編寫一個shell腳本,該腳本使用在Python解釋器上使用main.py腳本。

#!/bin/sh 
exec python /usr/share/myapp/main.py "[email protected]" 
1

您列出的第一個選項是通常的「Pythonic and cool」方法。您還可以使用Distribute進行管理,以便更方便地開發它。然後打包或安裝完成。分發系統可用於管理您的開發以及用作打包工具。它也爲你生成啓動腳本。您在您的setup.py中定義entry points,它會爲您創建頂級啓動腳本。

開發時,您可以設置Development Mode,設置Python環境以在工作區中查找您的軟件包。因此,下次運行時立即可以看到所有更改。然後,在開發完成之後,您可以將它打包爲一個蛋,甚至可以從同一來源構建RPM或Windows安裝程序。