2011-12-28 112 views
15

我试图让WSGI与virtualenv设置一起运行。我有所有的virtualenv工作的权利:mod_wsgi不尊重WSGIPythonHome

(virtualenv)dev:/var/www/app$ which python 
/var/www/virtualenv/bin/python 
(virtualenv)dev:/var/www/app$ python 
Python 2.6.1 (r261:67515, Dec 5 2008, 22:09:34) 
[GCC 4.1.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import importlib 
>>> 

而且在我的httpd.conf,我有以下方面的描述here

WSGIPythonHome /var/www/virtualenv 
WSGIPythonPath /var/www/virtualenv/lib/python2.6/site-packages 

但是当我尝试加载通过Apache应用程序,我得到以下错误:

[Wed Dec 28 12:28:15 2011] [error] [client 127.0.0.1] mod_wsgi (pid=15026): Exception occurred processing WSGI script '/var/www/app/wsgi.py'. 
[Wed Dec 28 12:28:15 2011] [error] [client 127.0.0.1] Traceback (most recent call last): 
[Wed Dec 28 12:28:15 2011] [error] [client 127.0.0.1] File "/var/www/app/wsgi.py", line 29, in <module> 
[Wed Dec 28 12:28:15 2011] [error] [client 127.0.0.1]  import importlib 
[Wed Dec 28 12:28:15 2011] [error] [client 127.0.0.1] ImportError: No module named importlib 

我错过了什么?甚至如何调试这种问题?

+0

'importlib'主要是一个Python 3的东西(尽管它的一个非常小的子集在2.7中可用)。它根本不在2.6中。 – Amber 2011-12-28 20:32:53

+1

好吧,但如果它从命令行工作,它不应该从Apache工作吗? – zigdon 2011-12-28 20:42:56

回答

18

您的mod_wsgi很可能是针对不同于您尝试强制使用的Python版本编译的。例如,你不能使用Python 2.4编译的mod_wsgi和使用Python 2.6构建的虚拟环境。

首先验证Python mod_wsgi的版本是由哪个版本构建的。

+0

是的,在日志中有一个条目说明它遵从错误的版本。好的 - 我尝试用'--use-python =/var/www/virtualenv/bin/python'来构建它,但它仍然会给出相同的警告?是否有我应该使用的另一面旗帜? – zigdon 2011-12-29 01:49:22

+1

选项是--with-python,而不是--use-python。使用生成的mod_wsgi.so上的ldd来验证正在使用哪个Python共享库版本。阅读文档http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation – 2011-12-29 04:27:50

+0

@GrahamDumpleton,我很好奇......是否有一种方法可以运行多个mod_wsgi实例(已针对不同版本的python编译过) )在相同的Apache进程下? – 2012-01-03 12:31:53