新建Django项目执行python manage.py migrate遇NodeNotFoundError求助
解决Django迁移错误:NodeNotFoundError: Migration auth.0012_user_following依赖不存在的('account', '0002_contact')节点
为啥会出现这个问题?
你刚建项目还没写一行代码就碰这错,核心原因肯定是项目里混进了不属于当前新项目的迁移缓存或残留文件:
- 大概率是你在同一个Python虚拟环境里跑过别的Django项目,那个项目里有个叫
account的应用,Django的迁移系统缓存了旧的依赖关系,没清干净; - 也有可能是你不小心把其他项目的
migrations文件夹复制到当前项目里了; - 极少数情况是Django的本地
__pycache__缓存抽风了。
一步步解决办法
1. 先清掉残留的迁移文件和缓存
首先检查你的mysite项目目录,有没有莫名其妙的account文件夹(或者其他你没创建的应用文件夹),有的话直接删掉。
然后清理所有__pycache__缓存文件夹:
# 在项目根目录执行这条命令,递归删掉所有__pycache__ find . -type d -name "__pycache__" -exec rm -rf {} +
2. 重置所有迁移文件
接下来把所有应用下的迁移文件(除了__init__.py)都删掉,彻底重置迁移状态:
# 删除所有migrations文件夹里的迁移文件(保留__init__.py) find . -path "*/migrations/*.py" -not -name "__init__.py" -delete # 删掉对应的.pyc编译文件 find . -path "*/migrations/*.pyc" -delete
3. 重新生成迁移并执行
现在重新生成默认应用的迁移文件,再跑migrate:
# 生成初始迁移文件 python manage.py makemigrations # 执行迁移 python manage.py migrate
4. 要是还不行,就换个干净的虚拟环境
如果上面几步都没用,那大概率是虚拟环境里残留了旧项目的配置。你可以:
- 删掉当前虚拟环境,重新创建一个;
- 给新环境装Django,再重新创建项目、跑migrate,肯定没问题。
验证一下
执行完上面的步骤后,再跑一遍python manage.py migrate,要是没报错,就说明问题解决了,可以放心开始写你的博客代码啦。
内容的提问来源于stack exchange,提问作者Samyak Jain
相关产品推荐
相关产品推荐

