使用 apache2 在 mod_wsgi 上运行 django python 3.4
Posted
技术标签:
【中文标题】使用 apache2 在 mod_wsgi 上运行 django python 3.4【英文标题】:running django python 3.4 on mod_wsgi with apache2 【发布时间】:2015-03-17 03:28:09 【问题描述】:您好,我在 ubuntu 服务器 14.10 上使用 mod_wsgi 和 python 在 django 上运行 apache 2 时收到以下错误。
我的 django 应用程序使用 python 3.4,但它似乎默认为 python 2.7,我无法从 pycrypto 导入来自 PIL 和 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']
【问题讨论】:
是的。毫无疑问,它使用 Python 2.7。您如何配置 Apache 站点以使用 mod_wsgi?你能发布你的网站配置吗? 【参考方案1】:我相信mod_wsgi是针对特定版本的python编译的,所以你需要一个py3.4版本的mod_wsgi。您可能可以从您的操作系统的软件包存储库中获取一个,或者您可以构建一个而不需要太多戏剧性的东西。从内存中,你需要 gcc 和 python-dev 包(python3-dev?)来构建。
好的,快速谷歌,对于 ubuntu 14.10:sudo apt-get install libapache2-mod-wsgi-py3
应该安装 mod_wsgi 的 py3 版本(可能要删除现有的 py2 版本)。
添加 shebang 行不会有任何好处,因为在读取 wsgi.py 脚本之前已经加载了 python 解释器。
【讨论】:
救命稻草答案。我花了 4 个小时试图弄清楚这一点。【参考方案2】:从我在这里看到的情况来看,您的应用程序正在使用带有 py3 编译模块的 py2 解释器,这是不行的。
我想到的一个简单的可能解决方案是将 manage.py 的第一行添加或更改为 #!/usr/bin/python3
。这将告诉脚本用 py3 解释。
猜测列表中的下一个将是 *.wsgi 文件或 apache 配置中的错误配置,无论您使用的是哪个。
【讨论】:
Apache Config: 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谢谢大家,
实际上,我今天早上自己解决了这个问题,方法是运行 mod_wsgi 的 make install ,其中 .configure 指向 python3.4。
我认为你是对的亚当。
【讨论】:
是的,我很确定仅仅改变 WSGIPythonHome 是行不通的。不过,选择 virtualenv 很有用。如果您认为正确,请将我的答案标记为正确:-) 为了清除一些东西 - 这里有另一个答案建议只更改WSGIPythonHome
。 WSGIPythonHome
将选择解释器,但仅当 mod_wsgi 针对您指向的同一主要/次要版本的 python 编译时才有效。以上是关于使用 apache2 在 mod_wsgi 上运行 django python 3.4的主要内容,如果未能解决你的问题,请参考以下文章
Apache 2 + mod_wsgi + WSGIScriptAlias
将 apache2 摘要身份验证信息传递给由 mod_wsgi 运行的 wsgi 脚本
使用 Python 3.6、Apache 2.4 和 Django 1.11 在 Ubuntu 上安装 mod_wsgi
如何在 Ubuntu + Apache2.4 + mod_wsgi 上为 Ansible 配置 ARA?