【问题标题】:Django - python3.4 virtualenv - apacheDjango - python3.4 virtualenv - apache
【发布时间】:2015-05-11 19:26:49
【问题描述】:

我有一个 Django 应用程序,我一直在使用 manage.py runserver 进行调试。

我现在正尝试使用 apache/mod_wsgi 来提供它。

当我尝试打开主页时收到 500 错误。日志文件在 functools.py 中显示语法错误。

mod_wsgi (pid=28016): Target WSGI script '/home/username/projects/django/testing/testing/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=28016): Exception occurred processing WSGI script '/home/username/projects/django/testing/testing/wsgi.py'.
Traceback (most recent call last):
File "/home/username/projects/django/testing/testing/wsgi.py", line 12, in <module>
  from django.core.wsgi import get_wsgi_application
File "/home/username/.virtualenvs/testing/lib/python3.4/site-packages/django/__init__.py", line 1, in <module>
  from django.utils.version import get_version
File "/home/username/.virtualenvs/testing/lib/python3.4/site-packages/django/utils/version.py", line 7, in <module>
  from django.utils.lru_cache import lru_cache
File "/home/username/.virtualenvs/testing/lib/python3.4/site-packages/django/utils/lru_cache.py", line 2, in <module>
  from functools import lru_cache
File "/home/username/.virtualenvs/testing/lib/python3.4/functools.py", line 291
  cls_or_self, *rest = args
               ^
SyntaxError: invalid syntax

据我所知,这是有效的 python3.4 语法。所以我不完全确定我是否正确配置了 WSGI 以使用我的 virtualenv。

#testing.conf
<VirtualHost *:80>
    WSGIDaemonProcess django.testing.username.vni user=username group=username python-path=/home/username/.virtualenvs/testing/lib/python3.4/site-packages:/home/username/.virtualenvs/testing/lib/python3.4:/home/username/.virtualenvs/testing
    WSGIProcessGroup django.testing.username.vni

    WSGIScriptAlias / /home/username/projects/django/testing/testing/wsgi.py

    ServerAdmin username@webserver.com
    ServerName django.testing
    ServerAlias www.django.testing

    Alias /static/ /home/username/projects/django/testing/static/

    <Directory />
        AllowOverride None
        Options -Indexes
    </Directory>

    <Directory /home/username/projects/django/testing/testing>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    ErrorLog /var/log/apache2/django.testing.log
    LogLevel warn

</VirtualHost>

我想我上面的 python-path 可能有问题。

#wsgi.py
import os

from django.core.wsgi import get_wsgi_application

import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..")
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testing.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

application = get_wsgi_application()

我不确定我是否正确处理了 sys.path.append() 或 DJANGO_SETTINGS_MODULE。他们就是为了解决我遇到的其他一些错误。

【问题讨论】:

  • 你是如何安装 mod_wsgi 的?看来您正在运行一个 3.4 项目,其中 mod_wsgi 为 2.7 编译。
  • 我想我只是 apt-get install libapache2-mod-wsgi 经过简短的搜索后,看起来我应该得到 libapache2-mod-wsgi-py3 而不是?
  • 根据您的发行版/版本,您可能需要编译 3.3+ Python mod_wsgi。这就是我们必须为 CentOS 6.5 / RHEL6 做的(是的,呃),因为它不能通过 yum 获得。如果'-py3'版本作为一个包提供,请先尝试一下。
  • @DanielRoseman:你是怎么看到的!?错误信息中是否有我遗漏的内容,或者您​​是否需要直觉?非常感谢,顺便说一句:)

标签: python django apache mod-wsgi


【解决方案1】:

正如 Daniel Roseman 所建议的,问题是我为 python3.4 安装了错误的 mod_wsgi 版本。我删除了 libapache2-mod-wsgi 并安装了 libapache2-mod-wsgi-py3。

【讨论】:

  • 你是我的英雄,我为此搜索了很长时间(针对不同的导入问题)。请接受你的回答,这样会更容易找到(我想,至少^^)
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2012-11-25
  • 2014-10-11
  • 2012-06-09
相关资源
最近更新 更多