Linux系统中Python与python3的pip是否存在差异?Ubuntu 21.04下Django运行报错的原因及解决方案
Python与pip版本差异及Django运行问题解答
1. Linux系统中Python和python3对应的pip是否存在差异?
肯定是有差异的,核心原因在于python和python3在Linux(尤其是Ubuntu这类发行版)里通常指向不同的Python解释器环境:
- 早些时候Linux默认
python指向Python2,python3指向Python3,对应的pip(Python2的包管理工具)和pip3(Python3的)完全独立,安装的包互不干扰; - 现在很多新系统里
python也会指向Python3,但如果你的python和python3版本不同(比如你这里的3.10 vs 3.9),那它们对应的pip工具(哪怕都叫pip)也会关联各自的Python环境,安装的包会存放在各自版本的site-packages目录里,互相隔离。
简单总结:python对应的pip管理的是python命令指向的那个Python环境的包,python3对应的pip(或pip3)管理的是python3环境的包,两者完全是分开的。
2. Ubuntu 21.04中Django运行错误的原因及解决方法
错误原因
你遇到的问题本质就是两个Python环境的隔离性:
- 你的系统里
python指向3.10.1,python3指向3.9.x,这是两个独立安装的Python版本; - 你安装Django的时候,应该是用了和
python3关联的pip(比如pip3 install django或者python3 -m pip install django),所以Django只被安装在了3.9的环境里; - 当你用
python manage.py runserver时,调用的是3.10的环境,这个环境里根本没装Django,自然就会报错No module named "Django"。
解决方法:让python命令能调用到带Django的环境
这里给你几个可行的方案,按推荐程度排序:
方案1:用系统工具配置默认Python版本(最稳妥)
Ubuntu自带的update-alternatives可以帮你统一管理默认的Python解释器:
- 先检查当前已注册的Python版本:
如果提示没有可用选项,就先把两个版本注册进去:update-alternatives --list python# 注册Python3.9,优先级设为2(数字越大优先级越高) sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2 # 注册Python3.10,优先级设为1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 - 然后选择默认版本:
终端会列出所有可选的Python版本,输入对应3.9的编号回车确认就行。sudo update-alternatives --config python - 之后再输入
python --version,应该就显示3.9.x了,这时候运行python manage.py runserver就能正常调用Django了。
方案2:给python设置别名(快速生效)
- 临时生效:在当前终端里执行这条命令,只在当前会话有效:
alias python=python3.9 - 永久生效:修改你的用户配置文件,比如
~/.bashrc(如果你用bash)或者~/.zshrc(用zsh的话),在文件末尾添加:
保存后执行alias python=python3.9source ~/.bashrc(或source ~/.zshrc)让配置立刻生效,之后每次打开终端python都会指向3.9。
方案3:给Python3.10重新安装Django
如果你想保留python指向3.10,那直接给这个环境装Django就行:
python -m pip install django
安装完成后,python manage.py runserver就能正常运行了。
内容的提问来源于stack exchange,提问作者Mohamed Gamal
相关产品推荐
相关产品推荐

