python setup.py卸载

python setup.py uninstall

我用python setup.py install安装了一个python包。

如何卸载它?


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

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

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

1
python setup.py install --record files.txt

卸载后,可以使用xargs进行删除:

1
xargs rm -rf < files.txt

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

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

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

1
2
3
>>> import my_module
>>> my_module.__file__
None

一旦删除,python将显示:

1
2
3
4
>>> import my_module
Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'


对我来说,以下主要是可行的:

安装PIP,例如:

1
$ easy_install pip

检查,您安装的包如何从PIP的角度命名:

1
$ pip freeze

这将列出您安装的所有软件包(以及PIP检测到的软件包)的名称。名称可以是长的,然后只使用在#egg=及其后面显示的包的名称。在大多数情况下,您也可以忽略版本部分(==-之后的内容)。

然后卸载包:

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

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

PIP应检测PIP安装的所有包装。它还应检测通过easy-install或setup.py安装的大多数软件包,但这在某些情况下可能会失败。

这是我在MS Windows上使用名为ttr.rdstmc的包进行的本地测试的真实示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ 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--升级

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

使用grepfind

上面的例子假设,您已经安装了grep。我安装了一套Linux实用程序(包括grep)。或者,使用本机MS Windows find,或者简单地忽略该过滤,在检测到的python包的较长列表中查找该名称。


答案有问题:

  • 不会在Mac上工作。
  • 如果安装了包含空格或其他特殊字符的文件字符,xargs命令将失败,并删除任何与单个单词匹配的文件/目录。
  • rm -rf中的-r是不必要的,最坏的情况是可以删除你不想。

相反,对于类似Unix的:

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

对于Windows:

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

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

https://ofswiki.org/wiki/uninstalling_setup.py_安装


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

1
python setup.py install --record files.txt

当您想卸载时,您只需:

1
sudo rm $(cat files.txt)

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


现在,python为您提供了在安装期间安装pip的选择(我在Windows上,至少python在Windows上安装!)。考虑到您在安装python时选择了安装pip(因为它是默认的,所以实际上不必选择),已经为您安装了pip。然后,在命令提示符中键入pip,您会看到一个帮助出现。您可以在那里找到必要的使用说明。例如,pip list向您显示已安装软件包的列表。你可以使用

1
pip uninstall package_name

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


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

例如,

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

(当然,"foo"就是一个例子)。


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

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


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

假设名称在"metadata"变量中可用:

1
pip uninstall $(python -c"from setup import METADATA; print METADATA['name']")

也许你可以选择这样做:

1)获取python版本-

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

->上面的命令给出了当前的python版本2.4.3

2)获取python的安装目录-

1
2
[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文件。

1
2
[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

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


不完全是回答问题,而是帮助我每天的事情:

安装软件包时

1
pip install .

这就把包裹放进了$HOME/.local。卸载

1
pip uninstall <package_name>

在马丁所说的基础上,记录安装输出和一些bash脚本可以很好地完成这个技巧。这就是我要做的……

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

而且很快。卸载。


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

所以我不明白他们为什么使用setup.py而不是写requirements.txt文件。需求文件可以用于在虚拟环境中安装包,并且不会与系统python包混淆。


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

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


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

1
2
sudo python setup.py install --record files.txt
sudo bash -c"cat files.txt | xargs rm -rf"