pip 无法卸载 <package>:“这是一个 distutils 安装的项目”
- 2025-03-04 08:25:00
- admin 原创
- 84
问题描述:
我尝试安装 Twilio 模块:
sudo -H pip install twilio
我得到了这个错误:
Installing collected packages: pyOpenSSL
Found existing installation: pyOpenSSL 0.13.1
Cannot uninstall 'pyOpenSSL'. It is a distutils installed project and
thus we cannot accurately determine which files belong to it which
would lead to only a partial uninstall.
有人知道如何卸载 pyOpenSSL 吗?
解决方案 1:
此错误意味着此包的元数据不包含属于它的文件列表。很可能您已通过操作系统的包管理器安装了此包,因此您需要使用它,而不是pip
更新或删除它。
例如,参见升级到 pip 10:这是一个 distutils 安装的项目,因此我们无法准确确定哪些文件属于它,这将导致仅部分卸载。· 问题 #5247 · pypa/pip就是一个这样的例子,其中包是使用 进行安装的apt
。
或者,根据您的需要,不使用系统 Python 和/或其全局环境,而是创建私有 Python 安装和/或环境可能会更有效率。这里有很多选项,包括、、virtualenv
和从源代码安装 Python 到
或/ (或)。venv
`pyenvpipenv
/usr/local$HOME
$HOME/.local`/opt/<whatever>
最后,我必须对经常建议的(例如在pip 10 和 apt:如何避免 distutils 包的“无法卸载 X”错误)--ignore-installed
pip
开关进行评论。
它可能会起作用(可能持续足够长的时间以满足您的业务需求),但也可能以不可预测的方式破坏系统。有一件事是肯定的:它使系统的配置不受支持,因此无法维护——因为您实际上用其他任意内容覆盖了发行版中的文件。例如:
如果新文件与旧文件二进制不兼容,则发行版中与原始文件链接的其他软件将出现段错误或出现其他故障。
如果新版本具有一组不同的文件,那么您最终会得到新旧文件的混合,这可能会破坏相关软件以及软件包本身。
如果您稍后使用操作系统的包管理器更改包,它将覆盖
pip
已安装的文件,同样会产生不可预测的结果。如果有配置文件之类的东西,不同版本之间的差异也会导致各种各样的损坏。
解决方案 2:
我遇到了同样的错误,并能够通过以下步骤解决:
pip install --ignore-installed pyOpenSSL
这将安装最新版本的软件包,然后如果你尝试安装,
pip install twilio
它会起作用的。
解决方案 3:
一般情况下,对于类似的错误,使用这种格式:
pip install --ignore-installed [package name]==[package version]
解决方案 4:
就我而言,我使用以下命令从内部 git 安装包:
python -m pip install package.whl --force
我这样做是因为我不想明确卸载以前的版本,而只是用较新的版本替换它。但它也会重新安装所有依赖项。我在其中一个包中遇到了错误。删除后--force
问题解决了。
我想补充一下,这--ignore-installed
对我也有用。而删除--force
对我来说基本上是做同样的事情。
解决方案 5:
我刚刚遇到这个错误,唯一能解决它的方法就是从中手动删除有问题的目录site-packages
。
完成此操作后,您可能需要使用 重新安装软件包--force-reinstall
。
解决方案 6:
阅读上述评论后,我明白了包 a 是使用 conda 安装的,而我尝试使用 pip 安装的新包 b 导致了问题。幸运的是,包 b 支持 conda,因此使用 conda 安装包 b 解决了问题。
解决方案 7:
我的情况是,直接删除 中安装的包site-packages
,然后重新安装这个包。要找到 的路径site-packages
,可以试试pip install package name
,具体路径的路径就会被打印出来。
扫码咨询,免费领取项目管理大礼包!