Debian Lenny、Python 2.7 和 mod_wsgi
我正在執行一個 Debian Lenny 盒子,它帶有 Python 2.5.2。我只想為我的 WSGI 應用程序執行 Python 2.7 *,*將 2.5 作為系統的預設值,但我無法讓它工作。
首先,我將 Python 2.7.2 從原始碼安裝到
/usr/local
:Python-2.7.2 # ./configure --enable-shared […] Python-2.7.2 # make […] Python-2.7.2 # make altinstall […]
python2.7
現在從命令行呼叫沒有任何問題。它還可以找到通過pip
in安裝的軟體包/usr/local/lib/python2.7/packages
。接下來,我手動建構
mod_wsgi
並將其複製到 Apache 模組目錄,以免觸摸apt-get
.mod_wsgi-3.3 # ./configure --with-python=/usr/local/bin/python2.7 […] mod_wsgi-3.3 # make […] mod_wsgi-3.3 # cp .libs/mod_wsgi.so /usr/lib/apache2/modules/mod_wsgi.so-2.7 mod_wsgi-3.3 # cd /usr/lib/apache2/modules modules # ln -sf mod_wsgi.so-2.7 mod_wsgi.so modules # ldd mod_wsgi.so-2.7 linux-vdso.so.1 => (0x00007fff08f53000) libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00002b0317e1f000) libpthread.so.0 => /lib/libpthread.so.0 (0x00002b03181fd000) libdl.so.2 => /lib/libdl.so.2 (0x00002b031841a000) libutil.so.1 => /lib/libutil.so.1 (0x00002b031861e000) libm.so.6 => /lib/libm.so.6 (0x00002b0318821000) libc.so.6 => /lib/libc.so.6 (0x00002b0318aa5000) /lib64/ld-linux-x86-64.so.2 (0x00002b03179cd000)
然後我修改
/etc/apache2/mods-available/wsgi.conf
並添加了以下指令:<IfModule mod_wsgi.c> […] WSGIPythonHome /usr/local […] </IfModule>
(當然,
wsgi.conf
是符號連結的/etc/apache2/mods-enabled
。)最後,我重新啟動了 apache,但我的 WSGI 腳本無法執行。我在 Apache 的錯誤日誌中得到以下回溯:
mod_wsgi (pid=20746): Exception occurred processing WSGI script '/path/to/script.wsgi'. Traceback (most recent call last): File "/usr/local/lib/python2.5/site-packages/Flask-0.7.2-py2.5.egg/flask/app.py", line 1306, in __call__ return self.wsgi_app(environ, start_response) File "/usr/local/lib/python2.5/site-packages/Flask-0.7.2-py2.5.egg/flask/app.py", line 1295, in wsgi_app return response(environ, start_response) File "/usr/local/lib/python2.5/site-packages/Werkzeug-0.6.2-py2.5.egg/werkzeug/wrappers.py", line 1017, in __call__ start_response(status, headers) TypeError: expected byte string object for status, value of type str found
我還嘗試了在’s 文件的安裝問題部分中找到的測試 WSGI 腳本,但我在這裡得到了相同的結果。從回溯來看,我猜 Apache 現在執行 Python 2.5 和為 2.7 編譯的組合。
mod_wsgi``TypeError``mod_wsgi
有任何想法嗎?
問題解決了。
mod_python
也被載入了,禁用它就可以了。由於它是mod_python
Lenny 的 Apache 附帶的 vanilla,它是針對 Python 2.5.2 編譯的——自然,這不能與mod_wsgi
針對不同版本的編譯結合使用。
tl;dr 確保
PATH
Apache 繼承的使用者帳戶看到的是 Python2.7/bin
而不是舊版本。http://modwsgi.googlecode.com/svn/branches/mod_wsgi-1.X/README
“如果您安裝了多個 Python 版本並且您沒有使用預設版本,您可能必須組織 Apache 應用程序在執行時繼承的 PATH 將導致 Apache 找到備用版本。或者,WSGIPythonExecutable 指令應該用於指定與編譯的 Python 版本相對應的“python”執行檔的確切位置。如果不這樣做,則在 Apache 中執行的 Python 版本可能會嘗試使用來自錯誤 Python 版本的 Python 模組。
除此之外,除了在 debian 中執行另一個 debian 之外,沒有什麼可以做的。
http://www.eggdrop.ch/texts/uml/
擁有不同虛擬環境的 Nginx 反向代理。