2011-04-04 23 views
11

我想分發一些python代碼,只有一些外部依賴,只安裝了核心python的機器(以及不熟悉easy_install等的用戶)。使用virtualenv分配python代碼?

我在想,或許virtualenv可以用於這個目的?我應該能夠編寫一些觸發virtualenv的bash腳本(使用合適的軟件包),然後運行我的代碼......但是這看起來有些雜亂,我想知道我是否正在重新發明輪子?

在那裏分發與依賴Python代碼的任何簡單的解決方案,在理想情況下,不需要在客戶端機器sudo

回答

5

擴建 - http://pypi.python.org/pypi/zc.buildout
作爲樣品看看我的乾淨的項目:http://hg.jackleo.info/hyde-0.5.3-buildout-enviroment/src它只有2個文件做的魔力,更在Makefile文件是可選的,但那麼你就需要bootstrap.py(請下載文件,但它運行只在Linux上)。 buildout.cfg是您編寫依賴關係和配置項目的主要文件。
http://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap/bootstrap.py下載bootstrap.py
然後運行python bootstap.pybin/buildout。儘管可能,但我並不建議在本地安裝buildout,只需使用一次bootstrap下載即可。

我必須承認,擴建並不是簡單的解決方案,但其真正的強大。所以學習是值得的。

UPDATE 2014年5月30日
因爲這是最近上投票,作爲一個答案(可能),我婉通知的一些變化。

首先 - 擴建現在從GitHub https://raw.githubusercontent.com/buildout/buildout/master/bootstrap/bootstrap.py

海德項目可能會因擴建2重大更改失敗下載。

在這裏你可以找到更好的樣品http://www.buildout.org/en/latest/docs/index.html我也想建議看看「與建築物相關的鏈接集合」部分,它可能包含您的項目的信息。

其次我很贊成,可以使用python安裝setup.py腳本親自更多。更多關於蛋結構可以在這裏找到http://peak.telecommunity.com/DevCenter/PythonEggs,如果這看起來太可怕 - 查找谷歌(查詢python egg)。在我看來,實際上這比構建更簡單(確實更容易調試),它可能更有用,因爲它可以在virtualenv的幫助下更容易地分發和安裝在任何地方,或者在全局範圍內,必須提供所有的隨時都可以使用源創建腳本。

2

您可以使用像PyInstaller的工具用於這一目的。您的應用程序將在所有平臺上顯示爲單個可執行文件,幷包含依賴項。用戶甚至不需要安裝Python!

以我的logview軟件包爲例,該軟件包依賴於PyQt4和ZeroMQ,並且包含所有使用PyInstaller創建的Linux,Mac OSX和Windows的發行版。

3

您不想分發您的virtualenv,如果這就是你在問什麼。但是你可以用pip創建要求的文件 - 通常稱爲requirements.txt - 並告訴你的用戶創建的virtualenv然後運行pip install -r requirements.txt,這將安裝所有依賴他們。

請參閱pip文檔以獲取the requirements file formatthe Pinax project的描述,以獲得一個非常好的項目示例。

+2

感謝丹尼爾,但我希望不必分發bash腳本,爲用戶(和sudo命令,我需要安裝virtualenv)這樣做? – malangi 2011-04-04 08:27:03

+0

我沒有說bash或sudo。 – 2011-04-04 08:52:42