运行Python Django程序遇ModuleNotFoundError:LoginServiceModule不存在
问题描述
我有一个名为LoginServiceBase.py的Python程序,放置在LoginService目录中,该目录下的__init__.py内容如下:
# Import views and other necessary modules from .views import LoginView, SignupView from .LoginServiceBase import settings # Define package-level variables APP_NAME = 'LoginServiceBase'
程序基于Django开发,我在LoginServiceBase.py中定义了Django配置类。执行python -m LoginServiceBase命令时,出现错误:ModuleNotFoundError: No module named 'LoginServiceModule.settings'; 'LoginServiceModule' is not a package。
我从未定义过LoginServiceModule这个名称,想请教:
- 该名称的来源是什么?
- 这是否为Python包的强制命名规范?
附报错栈信息:
traceback (most recent call last): File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/lib/python3.10/runpy.py", line 86, in _run_code exec(code, run_globals) File "/home/bbrelin/src/repos/mednotes/src/Microservices/LoginService/LoginServiceBase.py", line 4, in <module> application = get_wsgi_application() File "/home/bbrelin/src/repos/mednotes/.venv/lib/python3.10/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application django.setup(set_prefix=False) File "/home/bbrelin/src/repos/mednotes/.venv/lib/python3.10/site-packages/django/__init__.py", line 19, in setup configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) File "/home/bbrelin/src/repos/mednotes/.venv/lib/python3.10/site-packages/django/conf/__init__.py", line 92, in __getattr__ self._setup(name) File "/home/bbrelin/src/repos/mednotes/.venv/lib/python3.10/site-packages/django/conf/__init__.py", line 79, in _setup self._wrapped = Settings(settings_module)
问题分析与解决
1. LoginServiceModule的来源
这个名称和Python包强制规范无关,问题出在Django的配置上:
- Django启动时依赖
DJANGO_SETTINGS_MODULE环境变量,用来定位配置模块的路径。如果这个变量被错误设置为LoginServiceModule.settings,就会触发该报错。 - 检查两个地方:一是系统/虚拟环境的环境变量配置;二是
LoginServiceBase.py中是否有硬编码设置,比如os.environ.setdefault("DJANGO_SETTINGS_MODULE", "LoginServiceModule.settings")——这里的名称应该改成你的实际配置路径LoginService.LoginServiceBase(因为你的配置类在LoginService包下的LoginServiceBase.py中)。
2. Python包的命名规范
Python没有强制要求包必须使用特定名称,但PEP8规范建议:
- 包名用小写字母,下划线分隔(比如
login_service),避免大写和特殊字符。 - 但这只是风格建议,不是硬性要求,你的
LoginService包名完全合法,当前问题和命名规范无关,纯粹是配置错误导致的。
修复步骤
- 修正
DJANGO_SETTINGS_MODULE的值:- 如果是环境变量,将其设置为
LoginService.LoginServiceBase; - 如果是代码中设置,找到对应行修改引号内的路径。
- 如果是环境变量,将其设置为
- 调整运行命令:
你需要在LoginService的上级目录执行命令,使用完整的包模块路径:
直接运行python -m LoginService.LoginServiceBasepython -m LoginServiceBase会导致Python无法识别它是LoginService包下的模块。
内容的提问来源于stack exchange,提问作者redmage123
相关产品推荐
相关产品推荐

