如何卸载使用distutils安装的python软件包?


92

您可以简单地从python安装中删除目录,还是必须删除任何残留文件?

Answers:


45

它取决于您传递给的选项install以及系统/软件包中distutils配置文件的内容。我不相信会以这些方式在指定目录之外修改任何文件。

值得注意的是,distutils目前没有卸载命令

还值得注意的是,删除包/蛋可能会导致依赖关系问题,例如easy_install尝试减轻此类问题的实用程序。


4
您能否更新此内容以直接解决问题中文件的缠结?
S.Lott,

我以为自己做了-在distutils配置和安装标志指定的目录之外没有创建文件,因此这些目录中将存在任何“挥之不去”的文件。随包装的不同而不同。
cdleary

2
@cdleary:谢谢,但是,我希望您只是澄清和加强您的答案,而不是添加冗长的注释线程。
S.Lott

2
@ S.Lott:对不起,但我不知道您想澄清答案的哪一部分,您能更具体吗?
cdleary

1
msg139773日期:2011-07-04 14:35 distutils2 / packaging现在提供了删除功能和pysetup remove命令。
爱德华

19

您需要删除的三件事是:

  1. 包/模块
  2. 剧本
  3. 资料档案

现在,在我的linux系统上,这些位于:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr /共享

但是在Windows系统上,它们更有可能完全位于Python发行目录中。我不了解OSX,只是更可能遵循linux模式。


14

另一个基于时间戳的hack:

  1. 创建锚点: touch /tmp/ts
  2. 重新安装要删除的软件包: python setup.py install --prefix=<PREFIX>
  3. 删除比定位文件更新的文件: find <PREFIX> -cnewer /tmp/ts | xargs rm -r

1
-1。我不喜欢这个| xargs rm -r。我建议手动检查每个文件。在ext4(和其他文件系统)上,这find也会列出所有文件夹。如果您的前缀是/usr,则将要删除/usr/*
Mateen Ulhaq

8

是的,只是删除所有已安装distutils的文件是安全的。这适用于已安装的文件夹或.egg文件。自然,任何依赖于该代码的东西都将不再起作用。

如果您想使其再次运行,只需重新安装即可。

顺便说一句,如果您使用的是distutils,请考虑使用多版本功能。它允许您安装任何单个软件包的多个版本。这意味着,如果您只想安装更新版本,则无需删除软件包的旧版本。


5

在ubuntu 12.04中,我发现默认情况下,您唯一需要查看的地方是

/usr/local/lib/python2.7/

只需删除关联的文件夹和文件(如果有的话)!


有时在/ usr / lib / python <2.7 / 3.6>中
Vineet

4

如果这是出于测试和/或开发目的,setuptools具有一个develop命令,该命令会在您进行每次更改时进行更新(因此您不必每次进行更改都卸载并重新安装)。您也可以使用此命令卸载软件包。

如果您确实使用了此功能,则您声明为脚本的所有内容都将作为挥之不去的文件留下。


4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

删除所有文件,但留空目录。

那不是理想的,应该足以避免程序包冲突。

然后,如果需要,您可以通过阅读手动完成任务files.txt,或者也可以勇敢地自动执行空目录删除操作。

一个安全的助手是:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

已在Python 2.7.6,Ubuntu 14.04中测试。


3

对于Windows中的Python:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?

2

我只是卸载了一个python软件包,即使我不确定我做得多么完美,我还是有足够的信心。

我首先获得了所有与python相关的文件的列表,按日期排序,并假设我包中的所有文件或多或少都具有相同的时间戳,并且没有其他文件。

幸运的是,我已经在下面安装了python /opt/Python-2.6.1;如果我一直在使用Linux发行版随附的Python,那么我将不得不搜索所有的/usr,这将花费很长时间。

然后,我只是查看了该列表,并放心地指出,我想要删除的所有内容都由一个目录/opt/Python-2.6.1/lib/python2.6/site-packages/module-name/和一个文件组成/opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info

所以我只是删除了那些。

这是我按日期排序的文件列表的方式:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(顺便说一句,我认为这必须是GNU“查找”;您在OS X上获得的风格不了解“ -printf'%T @'”)

我用所有的时间。


2

对于Windows 7,

控制面板->程序->卸载

, 然后

选择要删除的python包。


@Mauricio我在列表中没有看到旧版本,但可以在站点包中看到egg文件。这有问题吗?

1

在Mac OSX上,手动删除pathToPython / site-packages /下的这两个目录将起作用:

  • {包裹名字}
  • {packageName}-{version} -info

例如,要删除pyasn1,这是一个distutils安装的项目:

  • rm -rf lib / python2.7 / site-packages / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

要找出您的站点包在哪里:

python -m site

1
可以正常工作。
c1377554

-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. 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.

然后我输入:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

做完了!


1
请尝试解释您的操作及其原因,而不仅仅是显示控制台输出。
猎头Xamd,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.