【问题标题】:running django python 3.4 on mod_wsgi with apache2使用 apache2 在 mod_wsgi 上运行 django python 3.4
【发布时间】: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?你能发布你的网站配置吗?

标签: django apache python-3.x 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 要求所有授予
  • wsgi.py: import os, sys # 将 hellodjango 项目路径添加到 sys.path sys.path.append('/project folder/MITLogger') # 将 virtualenv 站点包路径添加到来自 django.core.wsgi 的 sys.path sys.path.append('/usr/local/lib/python3.4/dist-packages') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MITLogger.settings") 导入get_wsgi_application 应用程序 = get_wsgi_application()
【解决方案3】:

谢谢大家,

实际上,我今天早上自己解决了这个问题,方法是运行 mod_wsgi 的 make install ,其中 .configure 指向 python3.4。

我认为你是对的亚当。

【讨论】:

  • 是的,我很确定仅仅改变 WSGIPythonHome 是行不通的。不过,选择 virtualenv 很有用。如果您认为正确,请将我的答案标记为正确:-)
  • 为了清除一些东西 - 这里有另一个答案建议只更改 WSGIPythonHomeWSGIPythonHome 将选择解释器,但仅当 mod_wsgi 针对您指向的同一主要/次要版本的 python 编译时才有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2013-03-10
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2016-02-09
相关资源
最近更新 更多