otaviosoares
otaviosoares

Reputation: 587

Django virtualenv, pythonpath issues

I'm trying to deploy a django app with virtualenv but I'm not a linux expert user.

It's on a shared host. If I type python I got the python 2.4 console. If a type python2.7 I got the 2.7 console.

I want to use the 2.7.

  1. I installed virtualenv with setuptools in my private .site-packages.
  2. I created my env using python 2.7: .site-packages/virtualenv --no-site-packages -p python2.7 env
  3. I activated my env and installed the packages I need.
  4. I configured (tried to) my .wsgi to use the env

I've been 2 days in step 4. The server has some pre installed modules, which are on sys.path. For example, it has django installed, but I want to use the module installed in my virtualenv.

I read several wsgi documentation and I came to this:

import sys, os, site

sys.stdout = sys.stderr

os.environ['PYTHON_EGG_CACHE'] = '/home/bruddennautica/apps_wsgi/.python-eggs'
os.environ['DJANGO_SETTINGS_MODULE'] = "brudden.settings"

sys.path.append('/home/bruddennautica/apps_wsgi')
sys.path.append('/home/bruddennautica/apps_wsgi/env/lib/python2.7/site-packages')

activate_this = '/home/bruddennautica/apps_wsgi/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

With this conf, I got a django error which shows me some things. The django error isn't important, it's caused because the django version is not equal to the one I installed in my virtualenv, the python version either.

PRINT: http://dl.dropbox.com/u/9290581/error.png

It's possible to see the python path entries, most of them not from virtualenv. The first one is: /home/bruddennautica/apps_wsgi/env/lib/python2.4/site-packages. However this folder doesn't exists. Apparently it's added by activate_this.py in line 22:

site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')

Anyone can help me?

Thanks

Upvotes: 1

Views: 1797

Answers (1)

Graham Dumpleton
Graham Dumpleton

Reputation: 58523

If your mod_wsgi is compiled for Python 2.4, you cannot use Python 2.7. You cannot even point mod_wsgi at a virtual environment constructed using Python 2.7. The only choice you have is to installed a mod_wsgi compiled against mod_wsgi, either from a binary distro package if available, or by compiling mod_wsgi from source code your self against the correct Python version.

Right now it seems you may be mixing Python versions, which you cannot do and will cause errors including crashes. You need to find out what version of Python mod_wsgi was compiled for.

See:

http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Shared_Library

for one way of finding this out.

Upvotes: 1

Related Questions