Reputation: 2623
My Django skill level: noob.
I am going nuts at setting the DJANGO_SETTINGS_MODULE
properly to finally get my model imported within a script. I use a virtualenv
for my project.
This is my current error:
ModuleNotFoundError: No module named 'dashex'
And the according feeder.py
script:
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'dashex.settings'
sys.path.append('os.path.dirname(os.path.dirname(os.path.abspath(__file__)))')
import django
django.setup()
import zmq
import time
from time import sleep
import uuid
from Dashboard_app.models import AccountInformation
[...]
Background:
I first used the settings.configure()
solution posted here. However, this solution raised this error... So I hope DJANGO_SETTINGS_MODULE
can do the trick.
According to the documentation (docu) I have to use Django-admin
to set DJANGO_SETTINGS_MODULE
.
What I've tried:
Executed
$ set DJANGO_SETTINGS_MODULE=dashex.settings
in my command prompt on windows, just nothing happens.
Executed
$ py manage.py set DJANGO_SETTINGS_MODULE=dashex.settings
which raises the error unknown command set
Executed
$ django-admin set DJANGO_SETTINGS_MODULE=dashex.settings
in the manage.py
root of my project raises the error no module named dashex
.
This answer from @Casper suggests to do the above mentioned, but how to handle this: C:\temp\testproject> set DJANGO_SETTINGS_MODULE=testproject.settings
?
This solution from @Max suggests to append export DJANGO_SETTINGS_MODULE=<django_project>.settings
to my virtual-environment. What is meant with this, how to do that?
Executed
$ django-admin runserver --settings=dashex.settings
which also raises the error no module named dashex
.
Executed
$ py manage.py runserver --settings=dashex.settings
which starts the server with the proper settings. But the initial mentioned error persists.
My project:
Settings.py:
import os.path
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = ''
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ["127.0.0.1", "locahost"]
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
#other Apps
'Wiki_app',
'rest_framework',
'Dashboard_app.apps.DashboardAppConfig'
]
Latest traceback after @alasdair's solution:
Traceback (most recent call last):
File "C:\Users\Jonas Blickle\Desktop\dashex\Dashboard_app\feeder.py", line 6, in <module>
django.setup()
File "C:\Program Files\lib\site-packages\django\__init__.py", line 19, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "C:\Program Files\lib\site-packages\django\conf\__init__.py", line 79, in __getattr__
self._setup(name)
File "C:\Program Files\lib\site-packages\django\conf\__init__.py", line 66, in _setup
self._wrapped = Settings(settings_module)
File "C:\Program Files\lib\site-packages\django\conf\__init__.py", line 157, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "C:\Program Files\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 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'dashex'
[Finished in 0.37s]
Working solution:
import sys
sys.path.insert(0, r"C:\Users\Jonas\Desktop\Dashex")
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'Dashex.settings'
import django
django.setup()
from Dashboard.models import AccountInformation
[...]
Upvotes: 1
Views: 2925
Reputation: 308999
django-admin and manage.py are not used to set environment variables, so the commands in your question like django-admin set DJANGO_SETTINGS_MODULE=dashex.settings
don't make sense.
On Windows, you can run set DJANGO_SETTINGS_MODULE=dashex.settings
in the command prompt before running the script. You say you don't want to use the shell, so it might be easier to set the environment variable in the script instead.
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'dashex.settings'
# Since feeder.py is in Dashboard_app, you need to add the parent directory
# to the python path so that dashex can be imported
# (without this you'll get the 'no module named dashex' error)
sys.path.append('..')
import django
django.setup()
# Now you can import models
Upvotes: 2