881

我已经安装了一个带有python setup.py install.

我该如何卸载它?

4

17 回答 17

1089

注意:避免使用python setup.py install使用pip install .

您需要手动删除所有文件,并撤消安装手动执行的任何其他内容。

如果您不知道所有文件的列表,可以使用该--record选项重新安装它,并查看生成的列表。

要记录已安装文件的列表,您可以使用:

python setup.py install --record files.txt

一旦你想卸载,你可以使用 xargs 进行删除:

xargs rm -rf < files.txt

或者,如果您运行的是 Windows,请使用 Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

然后也删除包含目录,例如/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/on macOS。它没有文件,但 Python 仍然会导入一个空模块:

>>> import my_module
>>> my_module.__file__
None

删除后,Python 显示:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'
于 2009-10-11T09:12:27.953 回答
217

对我来说,以下主要工作:

已安装 pip,例如:

$ easy_install pip

检查,从 pip 的角度来看,您安装的软件包是如何命名的:

$ pip freeze

这将列出您已安装的所有软件包的名称(并且由 pip 检测到)。该名称有时可能很长,然后仅使用在 和之后显示的包的名称#egg=。在大多数情况下,您也可以忽略版本部分(无论后面是==还是-)。

然后卸载包:

$ pip uninstall package.name.you.have.found

如果它要求确认删除包裹,那么你是幸运的人,它将被删除。

pip 将检测所有由 pip 安装的包。它还应检测通过 easy_install 或 setup.py 安装的大多数软件包,但这在极少数情况下可能会失败。

这是我本地测试的真实示例,其中包含ttr.rdstmc在 MS Windows 上命名的包。

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

编辑 2015-05-20

上面写的所有内容仍然适用,无论如何,现在有一些小的修改。

在 python 2.7.9 和 python 3.4 中安装 pip

最近的 python 版本附带了一个包ensurepip,即使在离线时也可以安装 pip:

$ python -m ensurepip --升级

在某些系统(如 Debian Jessie)上,这是不可用的(以防止破坏系统 python 安装)。

使用grepfind

上面的例子假设你已经grep安装了。我(当时我的机器上有 MS Windows)安装了一组 linux 实用程序(包括 grep)。或者,使用本机 MS Windowsfind或简单地忽略该过滤并在检测到的 python 包的更长列表中查找名称。

于 2012-10-09T10:19:27.150 回答
87

#1答案有问题:

  • 在mac上不行。
  • 如果安装的文件包含空格或其他特殊字符,该xargs命令将失败,并删除与单个单词匹配的所有文件/目录。
  • -rin是不必要的rm -rf,最坏的情况可能会删除您不想删除的内容。

相反,对于类 unix:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

对于窗户:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

卸载安装也存在无法解决的问题,setup.py在典型情况下不会打扰您。有关更完整的答案,请参阅此 wiki 页面:

https://ofswiki.org/wiki/Uninstalling_setup.py_install

于 2014-08-08T17:34:59.103 回答
48

首先记录你已经安装的文件。即使您以前运行过,也可以重复此命令setup.py install

python setup.py install --record files.txt

当您想卸载时,您可以:

sudo rm $(cat files.txt)

这是有效的,因为 rm 命令需要一个以空格分隔的文件列表来删除,而您的安装记录就是这样一个列表。

于 2010-10-28T12:00:21.100 回答
22

现在,python 让您可以选择在安装pip期间进行安装(我在 Windows 上,至少 python 为 Windows 这样做!)。考虑到您pip在安装 python 期间选择了安装(您实际上不必选择,因为它是默认设置),pip已经为您安装好了。然后,pip在命令提示符下输入,您应该会看到帮助。您可以在那里找到必要的使用说明。例如pip list,向您显示已安装软件包的列表。您可以使用

pip uninstall package_name

卸载您不再需要的任何软件包。在此处阅读更多信息(pip 文档)

于 2015-09-03T17:44:44.787 回答
10

不完全回答这个问题,但每天都对我有帮助:

安装你的包

pip install .

这会将包放入$HOME/.local. 卸载

pip uninstall <package_name>
于 2018-02-16T11:49:00.203 回答
8

懒惰的方法:只需从 Windows 安装菜单(如果您使用的是 Windows)或 rpm 命令卸载,前提是您在创建分发包后首先重新安装它。

例如,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

(“foo”当然是一个例子)。

于 2009-10-11T09:13:42.333 回答
6

转到您的 python 包目录并删除您的 .egg 文件,例如:在 python 2.5(ubuntu) 中:/usr/lib/python2.5/site-packages/

在 python 2.6(ubuntu) 中:/usr/local/lib/python2.6/dist-packages/

于 2009-10-11T09:13:35.907 回答
4

也许您可以这样做:-

1)获取python版本 -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> 上面的命令为你提供了当前的 python 版本,即2.4.3

2)获取python的安装目录——

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> 从上面的命令你可以得到安装目录 - /usr/lib/python2.4/site-packages

3)从这里你可以删除包和python egg文件

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

这对我有用..而且我能够卸载困扰我的软件包:)

于 2013-12-26T06:44:14.013 回答
3

我想你可以打开 setup.py,找到包名,然后让 pip 卸载它。

假设名称在“元数据”变量中可用:

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")
于 2015-10-25T03:57:02.433 回答
2

{virtualenv}/lib/python2.7/site-packages/(如果不使用 virtualenv 则{system_dir}/lib/python2.7/dist-packages/

  • 删除egg文件(例如distribute-0.6.34-py2.7.egg
  • 如果有 from file easy-install.pth,删除相应的行(它应该是源目录或 egg 文件的路径)。
于 2019-09-04T14:47:59.670 回答
1

扩展 Martin 所说的内容,记录安装输出和一点 bash 脚本就可以很好地解决问题。这就是我要做的...

for i in $(less install.record);
sudo rm $i;
done;

并且很快。已卸载。

于 2009-12-08T18:00:04.663 回答
1

如果您在重新安装软件包后仍有应该删除的文件,请确保该文件夹build也已删除。因此,假设这pkg是您要删除的包:

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

上面为 python3 工作并删除包及其 *.egg-info 文件

于 2019-09-04T13:50:34.640 回答
0

使用 bash 读取命令来删除相关文件可能会更好,如下所示:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"
于 2013-12-21T14:13:28.340 回答
0

我在过去的某个时候在我的全局环境中意外地运行了“python setup.py install”,并且在卸载时遇到了很大的困难。这些解决方案没有帮助。“pip uninstall”不适用于“无法卸载'splunk-appinspect'。没有找到要卸载的文件。” “sudo pip uninstall” 不起作用“无法卸载要求 splunk-appinspect,未安装”。我尝试卸载 pip、删除 pip 缓存、在我的硬盘驱动器中搜索包等...

“pip show”最终引导我找到解决方案,“位置:”指向一个目录,重命名该目录导致打包从 pip 列表中删除。我重命名了目录,它没有重新出现在 pip 的列表中,现在我可以在 virtualenv 中重新安装我的包。

于 2018-02-16T19:19:23.290 回答
0

python setup.py develop我在 conda 环境下设置了一个开发鸡蛋链接,并pip uninstall <packagename>删除了鸡蛋链接。至少在这种情况下,这pip uninstall是一种方法。

于 2021-08-10T05:43:21.577 回答
-1

我在我的 PyCharm 中运行python setup.py install过一次,它将所有软件包安装到我的 conda 基础环境中。后来当我想删除所有这些包时,pip uninstall不起作用。我不得不手动从 /anaconda3/lib/python3.7/site-packages 中删除它们:(

所以我看不出他们使用 setup.py 而不是编写 requirements.txt 文件的原因。需求文件可用于在虚拟环境中安装包,不会与系统 python 包混淆。

于 2019-01-14T01:05:54.920 回答