On 1 Aug 2012, at 9:30 AM, Daniel Gonzalez <
gonv...@gmail.com> wrote:
> On Wednesday, August 1, 2012 5:56:37 PM UTC+2, Jonathan Lundell wrote:
> On 1 Aug 2012, at 8:52 AM, Daniel Gonzalez <
gonv...@gmail.com> wrote:
>> Quoting from the link you posted:
>>
>> "The purpose of such Python virtual environments is to allow one to create multiple distinct Python environments for the same version of Python, but with different sets of Python modules and packages installed into the Python 'site-packages' directory."
>
> It (virtualenv) also supports different Python versions. Note later in the text where they talk about making sure that your mod_wsgi is built with the Python version you're using in the virtualenv.
>
> I am not building mod_wsgi: I am installing it with apt-get install. I do not know which is the version it was compiled for, since it comes pre-packaged with the apache ubuntu distribution. I assume it is the system-wide python version (2.6.5).
>
> But I need to use the python version in my virtualenv for my web2py application (2.7.2). Running *any* python script with *any* python interpreter is usually as easy as making sure that the right python interpreter is selected, by setting the PATH, and putting "#!/usr/bin/env python" on top of the python script. Why is mod_python different in this regard? Isn't it basically a wrapper to call the python interpreter?
I'm guessing because it's got some C components, and needs to be compiled against the same headers and libraries as the Python binary.
> Do you think there is any chance at all of using the python version in my virtualenv without having to recompile mod_wsgi?
>
> I am afraid that if I start recompiling mod_wsgi this will prove very complicated, and it will even force me to recompile apache ...
> Besides, what happens if tomorrow I need to upgrade my python version? Then I need to recompile mod_wsgi too. Looks complicated :(
I don't see why you'd need to recompile Apache, but yeah, it's a little complicated. Here's a discussion:
http://code.google.com/p/modwsgi/wiki/InstallationIssues
Notice that you don't necessarily have to recompile mod_wsgi for a Python patch-level upgrade (third digit).
FWIW, I've done this both ways. Under Ubuntu, I built both Python and mod_wsgi to get 2.7.3. When I moved to RHEL, I decided that I could live with Python 2.6, and didn't bother with Python (though I did have to rebuild mod_wsgi for other reasons).
If you *do* build, I suggest using a tool like Fabric to encapsulate the process, so you can repeat it as required. Among other things, that makes building new servers or moving to later versions a lot easier. Here's my current fab script (note that it's oriented toward RHEL, but the Ubuntu details should be similar). The commented-out --with-python option lets you specify a non-system Python for the build.
@roles('web')
def install_wsgi():
if env.os == 'rhel':
e = dict(wsgi_version = '3.3')
with cd('/tmp'):
run('wget -nv
http://modwsgi.googlecode.com/files/mod_wsgi-{wsgi_version}.tar.gz'.format(**e))
run('tar xvfz mod_wsgi-{wsgi_version}.tar.gz'.format(**e))
with cd('/tmp/mod_wsgi-{wsgi_version}'.format(**e)):
#./configure --with-python=/usr/local/bin/python
run('./configure')
run('make')
sudo('make install')
sudo('echo "LoadModule wsgi_module modules/mod_wsgi.so" > {apachedir}/conf.d/wsgi.conf'.format(**env))