python - ModuleNotFoundError:没有名为 Foo 的模块 - 如何将模型导入 Django 应用程序的脚本?
问题描述
我的 Django 技能水平:noob。
我在设置DJANGO_SETTINGS_MODULE
正确以最终在脚本中导入我的模型时发疯了。我将 avirtualenv
用于我的项目。
这是我当前的错误:
ModuleNotFoundError: No module named 'dashex'
以及相应的feeder.py
脚本:
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
[...]
背景:
我首先使用了此处settings.configure()
发布的解决方案。但是,这个解决方案引发了这个错误......所以我希望能做到这一点。DJANGO_SETTINGS_MODULE
根据文档 ( docu ) 我必须使用Django-admin
来设置DJANGO_SETTINGS_MODULE
。
我试过的:
$ set DJANGO_SETTINGS_MODULE=dashex.settings
在 Windows 上的命令提示符中执行,没有任何反应。已执行
$ py manage.py set DJANGO_SETTINGS_MODULE=dashex.settings
引发错误unknown command set
$ django-admin set DJANGO_SETTINGS_MODULE=dashex.settings
在我的项目的manage.py
根目录中执行会引发错误no module named dashex
。@Casper 的这个答案建议做上面提到的,但是如何处理这个:
C:\temp\testproject> set DJANGO_SETTINGS_MODULE=testproject.settings
?@Max 的这个解决方案建议附加
export DJANGO_SETTINGS_MODULE=<django_project>.settings
到我的虚拟环境中。这是什么意思,怎么做?已执行
$ django-admin runserver --settings=dashex.settings
,这也会引发错误no module named dashex
。已执行
$ py manage.py runserver --settings=dashex.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'
]
@alasdair 解决方案后的最新回溯:
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]
工作解决方案:
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
[...]
解决方案
django-admin 和 manage.py 不用于设置环境变量,因此您问题中的命令django-admin set DJANGO_SETTINGS_MODULE=dashex.settings
没有意义。
在 Windows 上,您可以set DJANGO_SETTINGS_MODULE=dashex.settings
在运行脚本之前在命令提示符下运行。您说您不想使用 shell,因此在脚本中设置环境变量可能更容易。
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
推荐阅读
- python - 如何将 .h5 文件转换为 .pb 文件?
- iis - 对预检请求的响应未通过访问控制检查:在标头中使用身份验证时,它没有 HTTP ok 状态
- powershell - Powershell 键/值对匹配问题
- r - 可以使用 lm() 将其他变量保持在其平均值,并将回归线绘制在双变量散点图上吗?
- android - 无故自动返回上一个活动画面
- python - 新版 fasttext 中的 predict_proba
- angular - 在 Cordova/Ionic 4 移动应用程序中提供原生广告?
- git - 如何在没有私钥的情况下添加具有 SSH URL 的子模块
- context-free-grammar - 模糊的 CFG 是否有可能转换为 CNF 并变得明确?
- java - API针对不同场景返回不同的对象类型