2012-10-04 32 views
4

在我們的生產服務器上運行Ubuntu 12.04,爲了確保我們的應用程序在預定義的一致環境中運行,我們使用Pythonbrew編譯自定義Python。我創建了一個將要運行我們的API服務器的用戶,用戶使用Pythonbrew創建了自己的Python 2.7.2環境,並使用pip安裝了必要的軟件包。uwsgi指定python二進制

我還在系統上安裝了uWSGI,它將包裝API應用程序並通過mod_wsgi將其提供給Apache。問題是我無法讓uWSGI使用正確的python二進制文件。目前的配置是這樣的:

[uwsgi] 
socket = 127.0.0.1:3031 
processes = 4 
chdir = /home/app/ 
pythonpath = /home/app 
gid = 1002 
uid = 1002 
module = api 
callable = APP 
enable-threads = true 

當我嘗試與終端上運行此配置:

uwsgi --ini app.ini 

它無法導入一些模塊。該模塊僅安裝在API用戶正在使用的Pythonbrew環境中。問題是uWSGI在/ usr/bin中使用默認的python二進制文件。

一個解決方案是使用在API用戶環境中使用pip安裝的獨立uWSGI,但我真的想使用系統的uWSGI,因爲它與OS更好地集成。

是否有任何方法來指定哪些Python二進制uWSGI應該使用,其他然後安裝一個單獨的?如果我必須安裝一個單獨的uWSGI實例,在系統啓動時啓動它的最佳方式是什麼?

編輯:剛纔意識到它可能不是使用python二進制文件,而只是針對它的庫,所以我沒有辦法使用默認安裝的wsgi和非默認的python。但問題仍然存在,將定製的uWSGI集成到系統中的最佳方式是什麼?

回答

2

uWSGI(以及mod_wsgi)不使用python二進制文件,而是使用python共享庫,因此您必須將uWSGI python插件與pythonbrew用戶的特定庫鏈接起來。

有很多技巧來實現這一目標(expecially如果pythonbrew Python版本系統版本相匹配),第一個彈出到我的心是指定pythonbrew用戶的前綴在其配置文件與

ENV = PYTHONHOME =路徑

順便說一下,是不是更好地使用virtualenvs而不是完整的python安裝爲您的用戶?

+0

使用Pythonbrew實際上是一箇舊的遺蹟。我們以前在10.04上運行,沒有2.7,所以我使用Pythonbrew在該服務器上獲得2.7。我現在可以使用virtualenv,但我希望在某個時候使用Pythonbrew來運行,以確保我們不依賴於Ubuntu發佈的Python版本。 – Blubber

+1

您可以使用pythonbrew,但系統範圍內,每個用戶將其virtualenvs映射到特定的基於pythonbrew的安裝。之後,你只需要爲每個版本生成一個uwsgi python插件 – roberto