运行 django python 3.4 on mod_wsgi with apache2

running django python 3.4 on mod_wsgi with apache2

您好,我在 ubuntu 服务器 14.10 运行 apache 2 上使用 mod_wsgi 和 python 访问网站 url 时出现以下错误姜戈。

我的 django 应用程序使用 python 3.4,但它似乎默认为 python 2.7,我无法从 PIL 和 AES 从 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']

据我所见,您的应用程序正在使用 py2 解释器和 py3 编译模块,这是不行的。

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

解释

猜测列表中的下一个可能是 *.wsgi 文件或 apache 配置中的错误配置,无论您使用哪个。

我相信 mod_wsgi 是针对特定版本的 python 编译的,因此您需要 mod_wsgi 的 py3.4 版本。您可以从您的 os 的包代表处获得一个,或者您可以构建一个没有太多戏剧性的东西。从记忆中你需要 gcc 和 python-dev 包(python3-dev?)来构建。

好的,快速 google,对于 ubuntu 14.10:sudo apt-get install libapache2-mod-wsgi-py3 应该安装 mod_wsgi 的 py3 版本(可能想要删除现有的 py2 版本)。

添加 shebang 行不会有任何好处,因为 python 解释器在读取 wsgi.py 脚本之前已经加载。

谢谢大家,

实际上我今天早上通过 运行 mod_wsgi 的 make install 将 .configure 指向 python3.4.

自己解决了这个问题

我认为你是对的亚当。