Ubuntu部署Django出现No module named 'rest_framework'错误如何解决
问题根源
你出现这个问题的核心原因是在激活虚拟环境的状态下错误使用sudo执行pip安装命令:sudo会切换到root用户上下文,跳过当前普通用户激活的虚拟环境,把包安装到系统全局的Python路径下,而你运行Django用的是当前用户/虚拟环境里的Python,自然找不到全局安装的包。
从你的报错信息可以看到,Django的加载路径是/home/ubuntu/.local/lib/python3.6/site-packages/,而你用sudo pip3 freeze列出的是root用户全局安装的包,两个路径完全不匹配,所以即使你在全局装了包,运行Django的Python环境也读不到。
解决方案步骤
- 首先进入你的项目目录,激活对应虚拟环境,激活成功后终端前缀会显示虚拟环境名称,格式类似
(venv) ubuntu@ip-xxx:~$ - 完全去掉sudo执行安装命令,两种方式二选一即可:
- 用requirements.txt批量安装:
pip install -r requirements.txt - 单独安装指定依赖:
pip install djangorestframework django-cors-headers
- 用requirements.txt批量安装:
- 安装完成后执行
pip freeze(不要加sudo),确认输出列表里包含djangorestframework、django-cors-headers等你在INSTALLED_APPS里注册的依赖 - 再运行Django启动命令即可正常加载依赖
额外注意事项
- 不要混用pip和pip3:激活虚拟环境后,pip命令默认就对应虚拟环境内Python版本的包管理工具,不需要额外加3后缀
- 如果执行pip命令提示权限不足,说明你的虚拟环境目录权限被之前的sudo命令改到了root名下,执行
sudo chown -R ubuntu:ubuntu /path/to/your/venv把虚拟环境目录权限改回当前ubuntu用户所有,再重新执行安装命令即可
内容的提问来源于stack exchange,提问作者C-Bizz
相关产品推荐
相关产品推荐

