i am running Ubuntu 10.04.1 LTS and it came pre-packed with python2.6 but i need to replace it with python2.7.2.
(The reason is simple, 2.7 has a lot of features backported from 3 )
i had installed python2.7.2 using
./configure
make
make altinstall
the altinstall option installed it, without touching the system default version, to /usr/local/lib/python2.7 and placed the interpreter in /usr/local/bin/python2.7
Then to help mod_wsgi find python2.7 i added the following to /etc/apache2/sites-available/wsgisite
WSGIPythonHome /usr/local
i start apache and run a test wsgi app BUT i am greeted by python 2.6.5 and not Python2.7
Later i replaced the default python simlink to point to python 2.7
ln -f /usr/local/bin/python2.7 /usr/bin/python
Now typing 'python' on the console opens python2.7 but somehow mod_wsgi still picks up python2.6
Next i tried,
PATH=/usr/local/bin:$PATH
export PATH
then do a quick restart apache, but yet again its python2.6 !!
Here is my $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
contents of /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|'.
Has anybody ever managed to make mod_wsgi run on a non-system default version of python ?
Best Answer
compiling python 2.7
don't forget
--enable-shared
or you may have problems later on.compiling mod_wsgi for python 2.7
https://code.google.com/p/modwsgi/wiki/InstallationIssues
since you did a
make altinstall
to installpython2.7
you won't have apython-devel
package to install; so you would need themod_wsgi
to refer to proper python.... try to start httpd ...
Because we are not using the same python and we didn't link the module with any particular option to make it look in the correct place, it cannot find
libpython2.7.so.1.0
, we can change that by makinglibtool
check the correct place.... try to start http again ...
That last error is because my system is running selinux and the file has the default context. A quick look at stackoverflow tells me it is an selinux issue.
fixing selinux context
The fix is to use the correct context, which can be found on the original mod_wsgi module.