gpt4 book ai didi

Django的/ Apache /的mod_wsgi : No module named importlib

转载 作者:行者123 更新时间:2023-12-04 03:22:31 24 4
gpt4 key购买 nike

在过去两个月中与django的dev服务器一起工作之后,终于到了迁移到apache + mod_wsgi的时候了。

问题是当我转到自己的网站(称为junux),映射到django应用程序的URL时,一切似乎都无法正常工作。在服务器上运行开发服务器时,一切正常。

错误的底线在apache error_log中提供给我:

ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib



我知道这与此问题上的许多其他问题相似(有很多问题我什至在这里都不会引用),但我仍然没有找到答案。我已经阅读了很多有关生产的指南,包括django的部署文档,mod_wsgi的指南,一些pycon演示,并且整日都在搜索该问题...

下面有很多有趣和令人兴奋的细节。

任何帮助将不胜感激。
提前致谢。

配置:
  • CentOS 6上带有mod_wsgi的Apache 2.2.15
  • 从源代码
  • 编译的Python 2.7.3
  • 该站点使用virtualenv

  • 这是apache返回的错误页面:
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.
    Apache/2.2.15 (CentOS) Server at junux.net Port 80

    apache error_log显示以下信息:
    mod_wsgi (pid=22502): Create interpreter 'junux.net|/dev'.
    mod_wsgi (pid=22502): Exception occurred processing WSGI script '/var/www/junux_dev/junux_site/wsgi.py'.
    Traceback (most recent call last):
    File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__
    self.load_middleware()
    File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware
    for middleware_path in settings.MIDDLEWARE_CLASSES:
    File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
    self._setup()
    File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
    File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 95, in __init__
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
    ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib

    相关的 wsgi.py:
    import os
    import sys
    import site

    # use our virtual environment
    SITE_DIR = os.path.dirname(__file__)
    PROJECT_ROOT = os.path.dirname(SITE_DIR)
    site_packages = os.path.join(PROJECT_ROOT, 'venv/lib/python2.7/site-packages')
    site.addsitedir(os.path.abspath(site_packages))
    sys.path.insert(0, SITE_DIR)
    sys.path.insert(1, PROJECT_ROOT)

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "junux_site.settings")

    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

    httpd.conf:
    (更多内容来自默认的Apache配置文件)
    <VirtualHost *:80>
    ServerName junux.net
    ServerAlias junux.net
    ServerAdmin admin@junux.net

    WSGIScriptAlias /test /var/www/test/hello.py
    WSGIScriptAlias /dev /var/www/junux_dev/junux_site/wsgi.py

    <Directory /var/www/test >
    Order allow,deny
    Allow from all
    </Directory>

    <Directory /var/www/junux_dev >
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    </Directory>

    </VirtualHost>

    LogLevel info

    有一个 WSGIScriptAlias/test可以提供对mod_wsgi确实有效的检查。是的打开该URL时,(非常简单)的应用程序可以正常工作(典型的问候世界)。

    我已按照pyt-sydney-2010演示文稿(从 here引用)中的指示,对wsgi文件中的 chmod o+r和整个 chmod o+rx目录中的 /var/www/junux_dev设置了权限。

    最佳答案

    mod_wsgi针对哪个版本的Python进行了编译?看起来您可能在系统上安装了多个Python,并且您的虚拟环境正在使用Python 2.7,但是mod_wsgi是针对2.6编译的。

    基于这个猜测,即importlib仅在Python 2.7中添加,因此,如果mod_wsgi是为2.6编译的,并使用该基本安装,则将无法找到importlib。

    运行检查:

    http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Shared_Library
    http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Installation_In_Use

    关于Django的/ Apache /的mod_wsgi : No module named importlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492683/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com