2012-11-27 20 views
5

我對目前部署Python代碼的方式感到不滿意,我想知道是否有更好的方法。首先,我會解釋我在做什麼,然後弊端:如何分配和部署具有依賴關係隔離的Python 3代碼

  • 當我發展,我使用的virtualenv做扶養隔離和使用PIP安裝的所有庫。 Python本身來自於我的OS(Ubuntu的)
  • 然後,我建我的代碼爲「.deb文件」 Debian軟件包,包括我的源樹和我的依賴關係
  • 畫中畫束然後,當我部署,我重建的virtualenv環境,源富/斌/啓動,然後運行我的程序(在Ubuntu的暴發戶)

這裏有問題:

  1. 畫中畫束是相當大的,並顯著增加了Debian軟件包的大小。這並不太大,但是很煩人。
  2. 我每次部署時都必須構建所有的C庫(PyMongo,BCrypt等)。這需要一點時間(幾分鐘),這是一個有點跛做這個CPU綁定工作在生產

這裏是我的約束:

  1. 必須對Python 3的優選爲3.2
  2. 工作
  3. 必須有依賴性隔離
  4. 必須與使用C(像PyMongo)

我聽說過冷凍庫的東西的工作,但我還沒有蜜蜂能夠得到這個工作。 pypi的cx_freeze似乎沒有編譯(至少在我的Python上)。其他凍結實用程序似乎不適用於Python 3.我怎樣才能更好地做到這一點?

回答

1

Wheel可能是目前這樣做的最好方法。

在部署機器上創建一個virtualenv,並將一個輪子以及任何依賴關係(也構建爲輪子)部署到該virtualenv。

這解決了問題:

  1. 具有依賴單獨的車輪意味着你不必重新部署尚未更改的依賴,削減部署假象
  2. 建設大包的大小(例如作爲LXML或SciPy的)可以在本地完成,然後編譯輪推到生產

而且,它工作正常使用C.

0

你看過buildout(zc.buildout)嗎?使用自定義配方,您可能可以自動執行大部分操作。

+0

庫這是自動化 - 自動化不是我的問題。我的問題是速度很慢,需要編譯生產 –

+0

你看過「輪子」分發包嗎? – sureshvv

+0

車輪現在處於對這類問題有用的地步 –

相關問題