已安装pip但执行python -m ensurepip报错,影响venv创建
解决Cygwin下Python3.9 ensurepip报错及虚拟环境创建失败问题
问题分析
报错ValueError: max() arg is an empty sequence是因为ensurepip模块内置的setuptools/pip轮子文件缺失,导致它无法找到可用的包版本计算最大值。Cygwin的Python3.9包可能未完整包含ensurepip所需的捆绑轮子,进而触发虚拟环境创建时的ensurepip调用失败。
解决方案
方案1:修复ensurepip的内置轮子
- 定位Python3.9的ensurepip目录:
cd /usr/lib/python3.9/ensurepip/ - 进入
_bundled子目录(如果不存在则手动创建):mkdir -p _bundled && cd _bundled/ - 到PyPI官网搜索与Python3.9兼容的setuptools和pip轮子(推荐版本:setuptools<=65.5.0,pip<=23.2.1),下载后放到当前目录。
- 重新运行
ensurepip验证:
无报错后即可正常使用python -m ensurepippython -m venv创建虚拟环境。
方案2:手动为无pip的虚拟环境安装pip
如果已经用--without-pip创建了虚拟环境,只需手动补装pip即可,不存在潜在问题:
- 激活虚拟环境:
source ~/.envs/proj/bin/activate - 下载适配Python3.9的get-pip.py脚本(可从pip官方获取对应版本的脚本)。
- 运行脚本安装pip和setuptools:
python get-pip.py - 验证pip正常:
pip --version
方案3:重装Cygwin的Python相关包
可能是Cygwin包安装不完整导致文件缺失,重新安装对应包:
- 打开Cygwin的setup.exe,在搜索框分别输入
python39-pip和python39-setuptools。 - 选择这两个包的「Reinstall」选项,完成安装后重启Cygwin。
- 再次测试
python -m ensurepip和虚拟环境创建命令。
关于--without-pip的说明
用该参数创建虚拟环境本身没有问题,只是跳过了ensurepip自动安装pip的步骤,只要后续手动安装了pip和setuptools,虚拟环境的功能与正常创建的完全一致,无需担心潜在问题。
内容的提问来源于stack exchange,提问作者Karl Berggren
相关产品推荐
相关产品推荐

