33

I tried to install django to work with apache and mod_wsgi but get this error:

ImportError: No module named django.core.handlers.wsgi,

I'v read that it may be user error...

On the console (ssh), with root access, I don't have any problems accessing django.core.handlers.wsgi , but when apache asks to access it, it can't

My django.wsgi:

import os
import sys

sys.path.append('my/rep/parents/of/my/project')
sys.path.append('/usr/lib/python2.4/site-packages/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'montest.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'


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

My vhost.conf:

Alias /media/ my/rep/parents/of/my/projet/montest/media/

<Directory my/rep/parents/of/my/projet/montest/media>
    Order deny,allow
    Allow from all
</Directory>

WSGIScriptAlias /montest my/rep/parents/of/my/projet/django.wsgi

<Directory my/rep/parents/of/my/projet>
    Order deny,allow
    Allow from all
</Directory>

EDIT :

Ok my result for ldd mod_wsgi.so

linux-gate.so.1 => (0x0013c000) 
libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000) 
libdl.so.2 => /lib/libdl.so.2 (0x0023b000) 
libutil.so.1 => /lib/libutil.so.1 (0x00420000) 
libm.so.6 => /lib/libm.so.6 (0x00110000) 
libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000) 

So i decide to test my mod_wsgi install with the test.wsgi

test.wsgi

def application(environ, start_response): 
    status = '200 OK'
    output = 'Hello world, I am a wsgi app!' 
    response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output]

my vhost.conf:

WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs/test.wsgi 
<Directory /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs> 
    Order allow,deny 
    Allow from all 
    Options +ExecCGI 
</Directory> 

It now works... next I will try my django.wsgi config

2
  • 1
    You should be using absolute paths in your configuration. Why are you starting paths with 'my'? Commented Aug 28, 2010 at 4:21
  • At least part of my problem that led me to this question ended up being that I'd moved my django base installation directory.. Soo.. Yeaaaaaah. Derp. Commented Aug 4, 2014 at 3:43

10 Answers 10

16

I solved the problem by adding location of site-packages, where I have kept django subdirectory (/Library/python/2.7/site-packages) to WSGIDaemonProcess:

WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP} 
    python-path=/Library/python/2.7/site-packages

If you are using embedded server mode use in httpd.conf:

WSGIPythonPath /Library/python/2.7/site-packages
Sign up to request clarification or add additional context in comments.

2 Comments

The path for me ended up being /usr/local/lib/python2.7/site-packages
Yep, I had this in a virtualenv. This is what fixed it for me
4

Why are you even trying to add the site-packages directory into sys.path? If your mod_wsgi is compiled against Python 2.4, then it should already be looking in the site-packages directory. Sounds like your mod_wsgi isn't even compiled against Python 2.4.

Run:

ldd mod_wsgi.so

against your installed mod_wsgi.so file to work out what Python version it is compiled for and post the result.

3 Comments

because they are not using 2.4 but 2.7. Probably because they have multiple versions installed
You can't force a mod_wsgi.so compiled for a specific Python version to use a different Python version. The actual required Python library is actually embedded/linked to mod_wsgi.so. What configuration they said ended up working was still broken.
You're right. I was having the same problem and then I realised that even though I created a virtualenv I was getting errors, the reason is that mod_wsgi was compiled for another python version.
3

I've had this issue before, and it was because the Apache/mod_wsgi process did not have permission to read the modules. You can make your site-packages/django directory world-readable, or add other appropriate user/group permissions.

2 Comments

Needed read and execute permissions on my site-packages directory. Only read didn't work for me.
write permission are required to write the compiled (.pyc) files. pip has as compile option to pre-compile accordingly.
3

Wrong:

WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7

Right:

WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7

I spent way too much time trying to figure out why my virtualenv wasn't loading django properly.

1 Comment

neurosnap like you I also spent way too much time trying to figure out why my virtualenv wasn't loading django properly. This worked....
2

I solved this issue by adding the parent directory that holds my django installation to sys.path in wsgi.py. Here are my settings, FWIW:

/home/banjer/myproject/wsgi.py:

import os, sys
sys.path.append('/home/banjer/django')
sys.path.append('/home/banjer') # this line solved it
sys.executable = '/usr/local/python-2.7.2/bin/python'
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

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

Comments

1

Check your site-package file permissions. None of the above solutions worked for me until I fix file permissions. Here's what's in my ssl_error_log file:

mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'. 
mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last):   File "/data/http/osqa/osqa.wsgi", line 14, in <module>
            import django.core.handlers.wsgi  ImportError: No module named django.core.handlers.wsgi

But I solved it on my server. If you can do this on the command line, then this solution is for you:

python
>>> import django.core.handlers.wsgi
>>>

What worked is that I chmod go+rx site-packages libpython* (this might be overkill, but it worked for me.)

I'm running as httpd as apache.user, and running python as root, could see the packages just fine, but my permissions were not setup correctly (to read by everyone), and that's why httpd could not read the packages.

1 Comment

Although not my exact issue, this led me to my problem: I had two django apps with different virtualenv paths venv vs env, but I had re-used my django.wsgi - thanks!!!
0

This line is certainly wrong:

sys.path.append('/usr/lib/python2.4/site-packages/django')

Install Django with/for the version of Python that mod_wsgi was built against.

3 Comments

i v read : "And Python 2.X version from Python 2.3 onwards can be used" code.google.com/p/modwsgi/wiki/QuickInstallationGuide
yes... you say i need to install mod_wsgi for python2.4 if i used python2.4 with my django ? correct ?
Or you need to install Django for whatever version of Python that mod_wsgi is for.
0

I know this is a somewhat old question, but I thought I'd chime in for future SO users who might find this question:

Your mod_wsgi is linked to python2.6, yet you're using python 2.4 to run django according to your config?

I'm going to assume your /usr/bin/python is pointing to something other than the 2.6 which is what mod_wsgi is compiled against. It might also be due to the fact that you're running django against 2.4. I received the same error when I was loading mod_wsgi linked against python2.6 when django was using python2.7. With the version of mod_wsgi I have installed - it came with support for both python2.[6-7], so all I had to do was remove the symlink in /usr/lib/apache2/modules/ for mod_wsgi.so -> mod_wsgi.so-2.6 and change it to mod_wsgi.so -> mod_wsgi.so-2.7.

Easy enough.

Comments

0

It would be a better idea if you remove django from your old python library..

[root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/django

..and reinstall it inside the 'site-packages' folder of the current python you are using:

[root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install

That's what i did and i don't get that error anymore!

Comments

0

Hello!

If you use deb-distributive of Linux (Debian, Ubuntu, etc), edit the file

/etc/apache2/modules/wsgi.load

This file contained path to correct wsgi-library (for active version Python interpreter). If you use Python2.6, change string

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.7

to

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.6

Also, you can change soft link to mod_wsgi module:

cd /usr/lib/apache2/modules
ln -s mod_wsgi.so-2.6 mod_wsgi.so

Not forget change link to file in /etc/apache2/modules/wsgi.load and restart apache server

service apache2 restart

P.S. Sorry for my bad English

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.