如何移除Python distutils安装的无法通过pip卸载的共享动态模块?
为什么pip卸不掉这个包
distutils 安装流程不会生成标准的包卸载元数据,根本不会记录安装时到底写了哪些文件到系统里。pip 为了避免误删Python运行的核心文件,不会强行对这种无清单的安装做删除操作,因此会直接报“无法准确判断归属文件、可能导致部分卸载”的错误。
实操步骤
- 先找到你手动装错的
py共享库位置
跑下面的命令,把当前Python的所有模块搜索路径全打出来:
顺着这些路径挨个找和python -c "import sys; [print(path) for path in sys.path if path]"py相关的文件:- 你自己用distutils编译的文件,一般是带
.so(Linux/macOS)、.pyd(Windows)后缀的py共享库 - Python自带的标准库文件要认准归属,别误删
- 你自己用distutils编译的文件,一般是带
- 直接手动删掉这个错装的文件就行
distutils装东西本质就是把编译好的文件复制到site-packages目录下,没有其他分散的隐藏依赖,找到对应文件直接删除就完成了90%的清理工作。 - 验证清理结果
新开一个Python交互窗口,跑下面的命令看模块加载的路径:
只要输出的路径回到Python官方默认的模块存储位置,就说明之前的覆盖问题已经解决了。import py print(py.__file__)
小提示
- 找文件的时候别图省事直接把路径下所有带
py字样的文件全删了,很容易误删Python运行必需的核心组件 - 如果删完文件,pip还是提示已经安装了
py包,可以用强制重装的命令把元数据刷回来:
刷完之后pip就有了这个包的完整安装清单,后续正常用pip install --ignore-installed --force-reinstall pypip uninstall py就能卸载了。
内容的提问来源于stack exchange,提问作者PatXio
相关产品推荐
相关产品推荐

