我正在运行Ubuntu 10.04.1 LTS,它预先装好了python2.6,但是我需要用python2.7.2来replace它。
(原因很简单,2.7有很多function从3反向移植)
我已经安装了python2.7.2使用
./configure make make altinstall
altinstall选项将它安装到/usr/local/lib/python2.7,而不用接触系统默认版本,并将解释器放在/usr/local/bin/python2.7
然后,以帮助mod_wsgifindpython2.7我添加到/ etc / apache2 / sites-available / wsgisite
WSGIPythonHome /usr/local
我启动apache并运行一个testingwsgi应用程序,但我是由Python 2.6.5而不是Python2.7迎接
后来我将默认的python simlinkreplace为python 2.7
ln -f /usr/local/bin/python2.7 /usr/bin/python
现在在控制台上键入“python”打开python2.7,但不知何故mod_wsgi仍然拿起python2.6
接下来我尝试了,
PATH=/usr/local/bin:$PATH export PATH
然后做一个快速重启apache,但又是它的python2.6!
这是我的$ PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
/ etc / apache2 / sites-available / wsgisite的内容
WSGIPythonHome /usr/local <VirtualHost *:80> ServerName wsgitest.local DocumentRoot /home/wwwhost/pydocs/wsgi <Directory /home/wwwhost/pydocs/wsgi> Order allow,deny Allow from all </Directory> WSGIScriptAlias / /home/wwwhost/pydocs/wsgi/app.wsgi </VirtualHost>
app.wsgi
import sys def application(environ, start_response): status = '200 OK' output = sys.version response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]
Apache error.log
'import site' failed; use -v for traceback [Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23235): Initializing Python. [Sun Jun 19 00:27:21 2011] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/2.8 Python/2.6.5 configured -- resuming normal operations [Sun Jun 19 00:27:21 2011] [info] Server built: Nov 18 2010 21:20:56 [Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23238): Attach interpreter ''. [Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23239): Attach interpreter ''. [Sun Jun 19 00:27:31 2011] [info] mod_wsgi (pid=23238): Create interpreter 'wsgitest.local|'. [Sun Jun 19 00:27:31 2011] [info] [client 192.168.1.205] mod_wsgi (pid=23238, process='', application='wsgitest.local|'): Loading WSGI script '/home/wwwhost/pydocs/$ [Sun Jun 19 00:27:50 2011] [info] mod_wsgi (pid=23239): Create interpreter 'wsgitest.local|'.
有没有人设法使mod_wsgi在非系统默认版本的python上运行?
./configure \ --prefix=/usr/local \ --enable-unicode=ucs4 \ --enable-shared \ LDFLAGS="-Wl,-rpath /usr/local/lib" make && make altinstall
不要忘记--enable-shared启用--enable-shared否则你以后可能会遇到问题。
https://code.google.com/p/modwsgi/wiki/InstallationIssues
既然你做了make altinstall来安装python2.7你将不需要安装python-devel软件包; 所以你需要mod_wsgi来引用适当的python。
./configure --with-python=/usr/local/bin/python2.7 # then edit Makefile if you want to change DESTDIR make && make install
尝试启动httpd …
启动httpd:httpd:/etc/httpd/conf/httpd.conf第221行的语法错误:/etc/httpd/conf.d/wsgi.conf第2行的语法错误:无法加载/opt/mod_wsgi2.7/ usr / lib64 / httpd / modules / mod_wsgi.so到服务器:libpython2.7.so.1.0:无法打开共享目标文件:没有这样的文件或目录
因为我们没有使用相同的python,而且我们也没有将模块与任何特定的选项链接起来,使它看起来在正确的位置,它找不到libpython2.7.so.1.0 ,我们可以通过使libtool检查正确地方 。
# use LDFLAGS to tell libtool resulting lib needs to # look for shared libs in /usr/local/lib too. ./configure \ --with-python=/usr/local/bin/python2.7 \ LDFLAGS="-R/usr/local/lib" # then edit Makefile if you want to change DESTDIR # eg DESTDIR = /opt/mod_wsgi2.7 make && make install
尝试再次启动http
启动httpd:httpd:/etc/httpd/conf/httpd.conf第221行的语法错误:/etc/httpd/conf.d/wsgi.conf第2行的语法错误:无法加载/opt/mod_wsgi2.7/ usr / lib64 / httpd / modules / mod_wsgi.so放入服务器:/opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so:无法打开共享对象文件:Permission denied
最后一个错误是因为我的系统正在运行selinux并且文件有默认的上下文。 快速浏览一下stackoverflow告诉我这是一个selinux问题。
# ls -Z /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so -rwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so
解决方法是使用正确的上下文,它可以在原始的mod_wsgi模块中find。
chcon --reference /etc/httpd/modules/mod_wsgi.so /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so
你也需要重新编译mod_wsgi too 。 只是重新编译python是不够的(不要忘记加载正确版本的mod_wsgi )
编辑: 点击这里安装说明
我遇到了同样的问题。 我正在看卸载mod_wsgi的选项,并用适当的configuration重新安装它。
阅读其中一篇文章,我意识到没有必要卸载我目前的mod_wsgi,我可以继续前进,重新安装mod_wsgi3.4(早先我有v3.2)的设置使用Python2.7(看起来像安装过程重新写入所有内容,没有任何错误/冲突)。
因为我已经安装了Python2.7。
[root @ server〜]#cd〜
[root @ server〜]#wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
[root @ server〜]#tar xvf mod_wsgi-3.4.tar.gz
[root @ server〜]#cd mod_wsgi-3.4
[root @ server〜]#。/ configure –with-python = / usr / local / bin / python2.7
[root @ server〜]#make
[root @ server〜]#make install
[root @ server〜]#LD_LIBRARY_PATH = / usr / local / lib / usr / local / bin / python
[root @ server〜]#ldconfig
[root @ server〜]#service httpd restart
[root @ server〜]#ldd /etc/httpd/modules/mod_wsgi.so
linux-vdso.so.1 => (0x00007fffc0aa9000) libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f03a5b20000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f03a5903000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f03a56fe000) libutil.so.1 => /lib64/libutil.so.1 (0x00007f03a54fb000) libm.so.6 => /lib64/libm.so.6 (0x00007f03a5277000) libc.so.6 => /lib64/libc.so.6 (0x00007f03a4ee2000) /lib64/ld-linux-x86-64.so.2 (0x00007f03a6133000)
在Amazon Linux 4.9.38-16.35.amzn1.x86_64上安装ReviewBoard工具时,遇到同样的问题:http: 4.9.38-16.35.amzn1.x86_64 。
通过运行yum install mod_wsgi ,我得到了mod_wsgi-python26.x86_64 。 后来我学会了用yum yum search mod_wsgi来searchyum,发现python27安装也可用。 所以运行sudo yum install mod_wsgi-python27.x86_64解决了这个问题。