Multiple python versions under apache+mod_wsgi

I have several virtual hosts configured under the same apache instance on redhat:

  • apache-2.2.15
  • mod_wsgi-3.5 compiled with default system python-2.6

For every virtual host WSGIScriptAlias setting is pointed to the python file where the virtual environment is activated:

activate_this = '/path_to_the_virtualenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

Now, I'm planning to upgrade one of the projects to python-2.7, another one to python-3.x. I know that I can have different virtual environments, separate python sandboxes. So, everything is good on the python side.

The question is: is it possible to use different python versions for different apache virtual hosts under the same apache+mod_wsgi instance?

If not, what would be the best option to proceed?

There is a relevant WsgiPythonHome setting, but it is defined globally in the "server config" context, not per virtual host. Plus, mod_wsgi is compiled for the specific python version, so I'm not sure it can handle the case.


Solution 1:

No it isn't possible. The mod_wsgi binary has to be compiled against one Python version only and only one instance of a compiled mod_wsgi module can be loaded into Apache at a time.

What you would need to do is setup Apache to proxy to a separate WSGI server listening on its own ports.

To use Apache/mod_wsgi as that backend server as well, you would want to investigate using mod_wsgi 4.1.X. See:

  • https://pypi.python.org/pypi/mod_wsgi

This newer version of mod_wsgi provides a way of installing mod_wsgi against multiple Python versions and running up an Apache instance for each using a provided script. The script takes over all the setup of the Apache configuration so you do not need to worry about it.