执行python manage.py migrate报错:找不到'muypicky.base'模块
问题背景
我正在Udemy平台学习《try-django-v1-11-python-web-development》Django入门课程,在Mac的虚拟环境中执行python manage.py migrate命令时触发了以下异常:
(trydjango1-11) C02T74CKGTF1:src josh.frazier$ python manage.py migrate Traceback (most recent call last): File "manage.py", line 22, in <module> execute_from_command_line(sys.argv) File "/Users/josh.frazier/Dev/trydjango1-11/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line utility.execute() File "/Users/josh.frazier/Dev/trydjango1-11/lib/python3.6/site-packages/django/core/management/__init__.py", line 307, in execute settings.INSTALLED_APPS File "/Users/josh.frazier/Dev/trydjango1-11/lib/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__ self._setup(name) File "/Users/josh.frazier/Dev/trydjango1-11/lib/python3.6/site-packages/django/conf/__init__.py", line 41, in _setup self._wrapped = Settings(settings_module) File "/Users/josh.frazier/Dev/trydjango1-11/lib/python3.6/site-packages/django/conf/__init__.py", line 110, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/Users/josh.frazier/Dev/trydjango1-11/lib/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/Users/josh.frazier/Dev/trydjango1-11/src/muypicky/__init__.py", line 1, in <module> from .base import * ModuleNotFoundError: No module named 'muypicky.base'
问题分析
从报错信息能直接看出,Django加载muypicky/__init__.py时,尝试执行from .base import *,但找不到muypicky.base模块——核心原因要么是你的muypicky应用目录下缺少base.py文件,要么是文件路径/命名存在问题。
解决方案
按照课程学习的逻辑,你可以按以下步骤排查解决:
确认文件结构是否正确
先检查你的项目目录结构,应该符合下面的格式:trydjango1-11/ src/ muypicky/ __init__.py base.py # 这个文件必须存在! settings.py urls.py wsgi.py manage.py如果
base.py不存在,大概率是你漏做了课程中拆分配置文件的步骤(比如把settings.py里的通用配置转移到base.py),需要补创建这个文件并填充对应内容。验证导入路径和文件命名
如果base.py确实存在,先手动测试导入是否正常:# 进入src目录,启动Python交互环境 (trydjango1-11) C02T74CKGTF1:src josh.frazier$ python >>> from muypicky.base import *如果这步报错,检查文件名是否拼写错误(比如写成
Base.py,Python文件名区分大小写);如果能成功导入,就去检查manage.py里的DJANGO_SETTINGS_MODULE是否正确设置为muypicky.settings。回溯课程步骤
因为是跟着Udemy课程学习,很可能是你跳过了创建base.py的环节。回去查看课程内容,确认是否有将settings.py的基础配置拆分到base.py的操作,比如把DEBUG、SECRET_KEY、INSTALLED_APPS等配置移到base.py,再在settings.py中导入这些内容。
内容的提问来源于stack exchange,提问作者Josh Frazier

