Ubuntu20.04下virtualenv无法识别新安装的Python3.10如何解决
问题根因
- 当前终端调用的
virtualenv是基于Ubuntu 20.04自带Python3.8安装的版本,默认以自身运行的Python3.8作为虚拟环境基准解释器,这就是不加参数默认创建3.8环境的原因。 - 通过deadsnakes PPA安装的Python3.10默认缺少
distutils、venv等必要组件,virtualenv扫描可用解释器时无法识别到完整可用的Python3.10,因此抛出找不到解释器的报错。 - 若Pyenv开启了全局shim代理,会修改PATH下Python相关命令的查找优先级,进一步干扰virtualenv对系统级Python3.10的路径探测。
修复步骤
- 先为Python3.10安装缺失的系统依赖:
sudo apt update sudo apt install python3.10-distutils python3.10-venv python3.10-dev
安装完成后先验证基础功能:执行/usr/bin/python3.10 -m venv test_venv,如果当前目录正常生成test_venv文件夹,说明Python3.10的虚拟环境组件已经正常,验证后可以删掉测试文件夹rm -rf test_venv。
- 排除Pyenv的路径干扰:
执行which virtualenv查看命令路径,如果返回路径包含.pyenv/shims/字段,先在当前shell临时切换到系统Python环境,避免shim拦截路径查找:
pyenv shell system
- 创建Python3.10虚拟环境,二选一即可:
- 方案一(推荐,无需额外安装virtualenv):直接用Python3.10自带的venv模块创建
# 先删除之前创建错误的虚拟环境文件夹 rm -rf myenv python3.10 -m venv myenv
创建完成后执行source myenv/bin/activate激活环境,执行python -V确认版本为3.10即正常。
- 方案二:使用virtualenv创建
先给Python3.10安装对应版本的pip和virtualenv,避免调用旧的Python3.8版本的virtualenv:
curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.10 python3.10 -m pip install --user virtualenv rm -rf myenv ~/.local/bin/virtualenv myenv -p /usr/bin/python3.10
- (可选)配置默认
virtualenv命令使用Python3.10
卸载系统自带的基于Python3.8的virtualenv,重载shell配置即可:
sudo apt remove -y --purge virtualenv echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
配置完成后直接执行virtualenv myenv就会默认基于Python3.10创建环境。
内容的提问来源于stack exchange,提问作者John Kealy
相关产品推荐
相关产品推荐

