user3823837
user3823837

Reputation: 63

running django python 3.4 on mod_wsgi with apache2

Hi I am getting the error below when going to the website url on ubuntu server 14.10 running apache 2 with mod_wsgi and python on django.

My django application uses python 3.4 but it seems to be defaulting to python 2.7, I am unable to import image from PIL and AES from pycrypto.

ImportError at /
cannot import name _imaging
Request Method: GET
Request URL:
Django Version: 1.7.3
Exception Type: ImportError
Exception Value:
cannot import name _imaging
Exception Location: /usr/local/lib/python3.4/dist-packages/PIL/Image.py in , line 63
Python Executable: /usr/bin/python
Python Version: 2.7.6
Python Path:
['/var/www/blabla',
'/usr/local/lib/python3.4/dist-packages',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/var/www/blabla',
'/usr/local/lib/python3.4/dist-packages']

Upvotes: 6

Views: 5896

Answers (3)

Adam Kerz
Adam Kerz

Reputation: 951

I believe that mod_wsgi is compiled against a specific version of python, so you need a py3.4 version of mod_wsgi. You may be able to get one from your os's package repository or you can build one without too much drama. From memory you'll need gcc and python-dev packages (python3-dev?) to build.

OK, quick google, for ubuntu 14.10: sudo apt-get install libapache2-mod-wsgi-py3 should install a py3 version of mod_wsgi (will probably want to remove the existing py2 version).

Adding a shebang line won't do any good as the python interpreter is already loaded before the wsgi.py script is read.

Upvotes: 9

user3823837
user3823837

Reputation: 63

Thanks guys,

I actually fixed the issue myself this morning by running the make install of mod_wsgi with .configure pointing to python3.4.

I think you were right Adam.

Upvotes: 0

gcerar
gcerar

Reputation: 988

From what I see here your application is using py2 interpreter with py3 compiled modules, which is no-go.

One simple possible solution that comes me in mind is to add or change first line of manage.py to #!/usr/bin/python3. This will tell script to be interpreted with py3.

Next on guess list would be misconfiguration in *.wsgi file or apache config, whichever you are using.

Upvotes: 0

Related Questions