【问题标题】:Mod_python error: ImportError: Could not import settingsMod_python 错误:ImportError:无法导入设置
【发布时间】:2010-11-01 01:02:06
【问题描述】:

试图让 Django 与 Apache 一起工作,但出现以下错误:

ImportError:无法导入设置“MyDjangoApp.settings”(它在 sys.path 上吗?是否有语法错误?):没有名为 MyDjangoApp.settings 的模块

我的 Django 应用位于 /home/user/django/MyDjangoApp/

我的 httpd.conf 位置部分如下所示:

<Location "/MyDjangoApp/">
  SetHandler python-program
  PythonHandler django.core.handlers.modpython
  SetEnv DJANGO_SETTINGS_MODULE MKSearch.settings
  PythonOption django.root /MyDjangoApp
  PythonPath "['/home/user/django/MyDjangoApp/','/var/www'] + sys.path" 
  PythonDebug On
</Location>

请告诉我如何更正位置部分以使 Django 工作?

【问题讨论】:

    标签: django apache mod-python


    【解决方案1】:

    我认为 mod_python 正在寻找 /home/user/django/MyDjangoApp 目录中不存在的 MKSearch 模块中的设置。尝试将父目录添加到 PythonPath 指令,如下所示:

    <Location "/MyDjangoApp/">
      SetHandler python-program
      PythonHandler django.core.handlers.modpython
      SetEnv DJANGO_SETTINGS_MODULE MKSearch.settings
      PythonOption django.root /MyDjangoApp
      PythonPath "['/home/user/django/', '/home/user/django/MyDjangoApp,'/var/www'] + sys.path" 
      PythonDebug On
    </Location>
    

    或从 DJANGO_SETTINGS_MODULE 环境变量中删除模块名称,如下所示:

    <Location "/MyDjangoApp/">
      SetHandler python-program
      PythonHandler django.core.handlers.modpython
      SetEnv DJANGO_SETTINGS_MODULE settings
      PythonOption django.root /MyDjangoApp
      PythonPath "['/home/user/django/MyDjangoApp,'/var/www'] + sys.path" 
      PythonDebug On
    </Location>
    

    【讨论】:

    • +1 django 文档掩盖了“/home/user/django”(允许“from MyDjangoApp import foo”)和替代方案之间的区别。
    • 从设置前面删除模块名称解决了我的问题。呸!
    【解决方案2】:

    为了完整起见给出这个答案 - 即使你的情况不同。

    我曾经将我的 django 项目命名为 test。好吧,django 正在导入 python 模块 test - 这是一个用于回归测试的模块,与我的项目无关。

    如果python找到另一个与你的django项目同名的模块,就会出现这个错误。以不同的方式命名您的项目,或将应用程序的父目录的路径添加到 sys.path。

    【讨论】:

    • 正是发生在我身上的事情。谢谢!
    • 这也是我的问题。我有一个名为 test 的暂存区,名称与内置包冲突。这似乎很常见,以至于 Django 可能应该为它提供一个特殊的错误消息。
    【解决方案3】:

    以下示例位于我的 Apache 配置文件中,可以正常工作。尽管人们给出了很好的答案,但我发现很难让 mod_python 工作。在大多数情况下,我收到的 cmets 都说使用 mod_wsgi,而不是 mod_python。

    我在波士顿 Python 聚会上看到的所有评论都同意 mod_wsgi 更易于使用。在我的 Red Hat EL 5 WS 上,从 mod_python 更改是不切实际的。

    <Location />
            SetHandler python-program
            PythonHandler django.core.handlers.modpython
            SetEnv DJANGO_SETTINGS_MODULE settings
            PythonOption django.root /home/amr/django/amr
            PythonPath "['/home/amr/django', '/home/amr/django/amr', '/usr/local/lib
    /site-packages/django'] + sys.path"
            PythonDebug On
    </Location>
    

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多