【问题标题】:Django wsgi.py can't initialize the settings module: "ModuleNotFoundError: No module named 'config'"Django wsgi.py 无法初始化设置模块:“ModuleNotFoundError: No module named 'config'”
【发布时间】:2022-01-25 21:44:16
【问题描述】:

我的 Django 开发环境在本机服务器上运行良好,但是当我尝试在本地或生产服务器上执行 wsgi.py 时,我收到了非常流行的 ModuleNotFoundError: No module named 'config' 错误。

回溯表明失败发生在django/core/wsgi.py 尝试执行django.setup(set_prefix=False) 并且该方法需要调用settings.[ANYTHING],在本例中为configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)

调用settings.LOGGING_CONFIG 变量告诉django.conf.settings 进行初始化,但在这种情况下它会失败:

Traceback (most recent call last):
  File "./config/wsgi.py", line 35, in <module>
    application = get_wsgi_application()
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\core\wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\__init__.py", line 18, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\conf\__init__.py", line 82, in __getattr__
    self._setup(name)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\conf\__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\conf\__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\...\anaconda\envs\venvname\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'config'

我的目录结构的相关部分如下所示:

parent-folder/
  config/
    __init.py__
    wsgi.py
    settings/
      __init.py__
      local.py
      production.py
  projectname/
    

我的wsgi.py 文件如下所示:

import os
import sys
from pathlib import Path

from django.core.wsgi import get_wsgi_application

ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent
sys.path.append(str(ROOT_DIR / "projectname"))

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")

application = get_wsgi_application()

我怀疑这是我将通过对某处的路径或模块引用进行单行更改来解决的问题,但到目前为止没有任何效果。非常感谢任何帮助。

编辑: 回溯显示,当django/conf/__init__.py执行LazySettings.setup()时,成功从os.environ.get(ENVIRONMENT_VARIABLE)中提取settings_module。所以问题出在下游,FWIW。

【问题讨论】:

  • 我想你只需要将父文件夹添加到 sys.path,就像你添加文件夹 projectname 一样。

标签: python django mod-wsgi wsgi


【解决方案1】:

在wsgi.py 文件中,settings 模块是“config.settings.production”,这意味着settings 目录应该是一个模块。因此添加一个空的 __init__.py 文件进入设置目录以解决问题。

【讨论】:

  • 谢谢,Mohammad - 我的设置包含 __init__.py__ 文件,但我忽略了将它包含在“我的目录结构的相关部分”中。
【解决方案2】:

Razenstein 的评论是正确答案:“您只需将父文件夹添加到 sys.path,就像添加文件夹 projectname 一样。”我的路径缺少封闭文件夹。

【讨论】:

  • 我面临同样的问题,@MW Frost 可以在这里发布完整的答案吗?会更有帮助。如果仅在项目中使用应用程序,项目名称可能是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-27
相关资源
最近更新 更多