使用 mod_wsgi、Django 和 MongoEngine 时出错
Error using mod_wsgi, Django and MongoEngine
我已经用 MongoEngine 建立了一个 Django 站点,我正在尝试 运行 使用 Apache 和 mod_wsgi 使用 virtualenv。
它 运行 在开发中很好,但在 Apache 下(在 ubuntu 14.04.2 上)我在 apache 日志中收到以下错误:
mod_wsgi (pid=16130): Exception occurred processing WSGI script '/data/.../.../wsgi.py'.
Traceback (most recent call last):
File "/data/.../.../wsgi.py", line 22, in application
return get_wsgi_application()(environ, start_response)
File "/data/venv/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/data/venv/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/data/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/data/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/data/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/data/.../.../settings.py", line 15, in <module>
import mongoengine
File "/data/venv/lib/python3.4/site-packages/mongoengine/__init__.py", line 1, in <module>
from . import document
File "/data/venv/lib/python3.4/site-packages/mongoengine/document.py", line 51
class EmbeddedDocument(BaseDocument, metaclass=DocumentMetaclass):
^
SyntaxError: invalid syntax
知道为什么会发生这种情况吗?这对我来说特别奇怪,因为我在 mongoengine 源代码中找不到有问题的行。
我的包裹是:
dj-database-url==0.3.0
dj-static==0.0.6
Django==1.8
django-toolbelt==0.0.1
gunicorn==19.3.0
mongoengine==0.9.0
psycopg2==2.6
pymongo==2.8
static3==0.5.1
我不确定它是否相关,但为什么它使用 python2.7
中的 importlib
而不是 python3.4
?
我的 mongoengine/document.py 副本(使用 pip install
安装)与 git 中的版本不匹配,并且具有以下内容:
class EmbeddedDocument(BaseDocument, metaclass=DocumentMetaclass):
...
# The __metaclass__ attribute is removed by 2to3 when running with Python3
# my_metaclass is defined so that metaclass can be queried in Python 2 & 3
我是 python 的新手,所以我不明白这一点,但似乎 python 3 不兼容?
问题是我使用的是 mod_wsgi
的 ubuntu libapache2-mod-wsgi
包版本,它是为 Python 2.7 构建的,但我的 virtualenv 是围绕 python 3.4.
问题已通过卸载 libapache2-mod-wsgi
并安装为 Python 3.4 构建的 libapache2-mod-wsgi-py3
解决。
我已经用 MongoEngine 建立了一个 Django 站点,我正在尝试 运行 使用 Apache 和 mod_wsgi 使用 virtualenv。
它 运行 在开发中很好,但在 Apache 下(在 ubuntu 14.04.2 上)我在 apache 日志中收到以下错误:
mod_wsgi (pid=16130): Exception occurred processing WSGI script '/data/.../.../wsgi.py'.
Traceback (most recent call last):
File "/data/.../.../wsgi.py", line 22, in application
return get_wsgi_application()(environ, start_response)
File "/data/venv/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/data/venv/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/data/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/data/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/data/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/data/.../.../settings.py", line 15, in <module>
import mongoengine
File "/data/venv/lib/python3.4/site-packages/mongoengine/__init__.py", line 1, in <module>
from . import document
File "/data/venv/lib/python3.4/site-packages/mongoengine/document.py", line 51
class EmbeddedDocument(BaseDocument, metaclass=DocumentMetaclass):
^
SyntaxError: invalid syntax
知道为什么会发生这种情况吗?这对我来说特别奇怪,因为我在 mongoengine 源代码中找不到有问题的行。
我的包裹是:
dj-database-url==0.3.0
dj-static==0.0.6
Django==1.8
django-toolbelt==0.0.1
gunicorn==19.3.0
mongoengine==0.9.0
psycopg2==2.6
pymongo==2.8
static3==0.5.1
我不确定它是否相关,但为什么它使用 python2.7
中的 importlib
而不是 python3.4
?
我的 mongoengine/document.py 副本(使用 pip install
安装)与 git 中的版本不匹配,并且具有以下内容:
class EmbeddedDocument(BaseDocument, metaclass=DocumentMetaclass):
...
# The __metaclass__ attribute is removed by 2to3 when running with Python3
# my_metaclass is defined so that metaclass can be queried in Python 2 & 3
我是 python 的新手,所以我不明白这一点,但似乎 python 3 不兼容?
问题是我使用的是 mod_wsgi
的 ubuntu libapache2-mod-wsgi
包版本,它是为 Python 2.7 构建的,但我的 virtualenv 是围绕 python 3.4.
问题已通过卸载 libapache2-mod-wsgi
并安装为 Python 3.4 构建的 libapache2-mod-wsgi-py3
解决。