使用Apache2和mod_wsgi运行Django Python 3.4。

6

嗨,当我访问在运行Apache 2和Django的Python的Ubuntu服务器14.10上的网站URL时,出现了以下错误。

我的Django应用程序使用Python 3.4,但似乎默认为Python 2.7,我无法从PIL导入图像和从pycrypto导入AES。

ImportError at /
无法导入名称_imaging
请求方法:GET
请求URL:
Django版本:1.7.3
异常类型:ImportError
异常值:
无法导入名称_imaging
异常位置: /usr/local/lib/python3.4/dist-packages/PIL/Image.py, 第63行
Python可执行文件:/usr/bin/python
Python版本:2.7.6
Python路径:
['/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']


1
没错,使用Python 2.7。你如何配置Apache站点以使用mod_wsgi?你能发布你的站点配置吗? - Nostalg.io
3个回答

9
我相信mod_wsgi是编译在特定版本的Python上的,所以您需要一个py3.4版本的mod_wsgi。您可以从操作系统的软件包存储库中获取一个,或者自己构建一个。我记得您需要gcc和python-dev软件包(python3-dev?)来构建。
好的,快速谷歌一下,在ubuntu 14.10上:sudo apt-get install libapache2-mod-wsgi-py3 应该安装一个py3版本的mod_wsgi(可能需要删除现有的py2版本)。
添加shebang行不会起任何作用,因为python解释器已经在读取wsgi.py脚本之前加载了。

救命稻草。我花了4个小时来尝试解决这个问题。 - Rutwick Gangurde

0

从我在这里看到的,您的应用程序正在使用带有编译模块py3py2解释器,这是不可行的。

我想到的一个简单的可能解决方案是添加或更改manage.py的第一行为#!/usr/bin/python3。这将告诉脚本使用py3进行解释。

接下来猜测列表中可能出现的问题是*.wsgi文件或您正在使用的apache配置错误。


Apache配置:
DocumentRoot /var/www/html WSGIDaemonProcess sampleapp python-path=/project folder/MITLogger:/usr/local/lib/python3.4/dist-packages
WSGIProcessGroup sampleapp
WSGIScriptAlias / /project folder/MITLogger/MITLogger/wsgi.py <Directory /project folder/MITLogger/MITLogger>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
- user3823837
wsgi.py:导入 os、sys

将 hellodjango 项目路径添加到 sys.path 中

sys.path.append('/project folder/MITLogger')

将虚拟环境的 site-packages 路径添加到 sys.path 中

sys.path.append('/usr/local/lib/python3.4/dist-packages')os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MITLogger.settings")from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
- user3823837

0

谢谢大家,

今天早上我自己解决了这个问题,通过运行使用 .configure 指向 python3.4 的 mod_wsgi 的 make install。

我想你是对的,Adam。


是的,我相当确定仅仅改变WSGIPythonHome是不起作用的。不过选择一个虚拟环境确实很有用。如果你认为我的回答正确,请将其标记为正确 :-) - Adam Kerz
澄清一下 - 这里有另一个答案建议只需更改 WSGIPythonHomeWSGIPythonHome 将选择解释器,但仅在 mod_wsgi 编译针对您指向的相同主/次 Python 版本时才起作用。 - Adam Kerz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接