Невозможно импортировать модуль настроек в django
Я создаю пользовательский интерфейс с помощью инфраструктуры аутентификации Django. Однако, когда я пытаюсь импортировать какой-либо модуль (например, модель 'User' или функцию 'authenticate'), которому необходим доступ к модулю настроек, я получаю такую ошибку:
c:/Users/Lorenzo/Desktop/progetto_mondodb_di_lorenzo_giaretta/Bit4All/BitEx/main.py
Traceback (most recent call last):
File "c:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\Bit4All\BitEx\main.py", line 4, in <module>
from views import mainWindow
File "c:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\Bit4All\BitEx\views.py", line 3, in <module>
from models import Profile
File "c:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\Bit4All\BitEx\models.py", line 2, in <module>
from django.contrib.auth.models import User
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\contrib\auth\models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\contrib\auth\base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\db\models\base.py", line 107, in __new__
app_config = apps.get_containing_app_config(module)
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\apps\registry.py", line 252, in get_containing_app_config
self.check_apps_ready()
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\apps\registry.py", line 134, in check_apps_ready
settings.INSTALLED_APPS
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\conf\__init__.py", line 79, in __getattr__
self._setup(name)
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\conf\__init__.py", line 66, in _setup
self._wrapped = Settings(settings_module)
File "C:\Users\Lorenzo\Desktop\progetto_mondodb_di_lorenzo_giaretta\myvenv\lib\site-packages\django\conf\__init__.py", line 144, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File **"C:\Users\Lorenzo\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named 'Bit4All'**
Похоже, что в файле _init_.py, внутри django/conf, который в настоящее время находится в моей виртуальной среде, происходит что-то неправильное при попытке импортировать модуль настройки (с importlib.import_module).
Фрагмент кода, ответственный за проблему:
class Settings:
def __init__(self, settings_module):
# update this dict from global settings (but only for ALL_CAPS settings)
for setting in dir(global_settings):
if setting.isupper():
setattr(self, setting, getattr(global_settings, setting))
# store the settings module in case someone later cares
self.SETTINGS_MODULE = settings_module
mod = importlib.import_module(self.SETTINGS_MODULE) #settings_module = 'Bit4All.settings'
...
Здесь находятся интересующие вас файлы:
Bit4All
Bit4All
_init_.py
settings.py
.
BitEx
_init_.py
main.py
views.py
_init_.py
manage.py
myvenv
Lib
django
conf
- _init_.py
_init_.py
Мне удалось свести проблему к импорту модуля настроек, я попробовал указать пакет якоря следующим образом:
mod = importlib.import_module('.Bit4All.settings', 'Bit4All')
Я даже попробовал (временно, это было бы не очень элегантным решением) скопировать файл settings.py в ту же папку, что и файл _init_.py (django/conf/), вот так:
mod = importlib.import_module('settings')
однако, появляется та же ошибка, что и раньше (Нет модуля с именем settings)
Наверное, что-то не так со ссылкой на модуль для импорта, я не очень понимаю, как я должен ссылаться на файл настроек из глубины папки моего виртуального окружения.
NOTE: если я запускаю файл manage.py
, то проблем с импортом настроек не возникает
вот установленные пакеты, если они полезны (я использую python 3.9):
Django==3.0.5
djongo==1.3.6
pymongo[srv]==3.12.1
python-decouple==3.6
PyQt5==5.15.7
Ну это просто, вы можете использовать имя проекта для импорта настроек:
from ProjectName.settings import ModuleName