卸载带有"pip"的软件包是否也会删除依赖软件包?

Hos*_*ein 123 python packages pip

当您使用pip安装包时,所有必需的包也将随之安装(依赖项).卸载该包还会删除依赖包吗?

bwv*_*549 195

您可以安装并使用pip-autoremove实用程序来删除程序包以及未使用的依赖项.

# install pip-autoremove
pip install pip-autoremove
# remove "somepackage" plus its dependencies:
pip-autoremove somepackage -y
Run Code Online (Sandbox Code Playgroud)

  • “pip-autoremove”已经处于损坏状态一年了,因为它的开发人员没有正确维护它。为了修复它([source](https://github.com/invl/pip-autoremove/pull/44#issuecomment-1042448589)),你必须找到 python 安装中的文件 `pip_autoremove.py`目录“<python_root>/Scripts/”并将其移动到“<python_root>/Lib/site-packages”,然后就可以正常工作了。@TomoyukiAota 如果您不想弄乱或损害您的系统,请不要使用“pip3-autoremove”,这个项目已经两年没有更新,而且星星很少。 (18认同)
  • 截至 2019 年 10 月,我在 Python 3 中工作得很好。 (12认同)
  • @loved.by.Jesus - 我使用的是 python 3.8.3,我进行了测试,仍然看到命令执行为 `pip-autoremove` (破折号不是下划线)。`pip_autoremove` 给了我 `command not find`。 (8认同)
  • 在 Windows 上不起作用“ModuleNotFoundError:没有名为“pip_autoremove”的模块”(https://github.com/invl/pip-autoremove/issues/43) (8认同)
  • 不幸的是,它还没有真正的Python3支持(请参阅https://github.com/invl/pip-autoremove/issues/18)。 (3认同)
  • `pip-autoremove` 对我不起作用:`'pyqtwebengine<5.13; python_version >= "3"' 发行版未找到,并且是应用程序所需的` (2认同)
  • [pip3-autoremove](https://github.com/enjoysoftware/pip3-autoremove) 为我工作。我在 Windows 10 上使用 Python 3.8.3。运行 `pip3-autoremove jupyterlab -y` 删除了 jupyterlab 及其依赖项。 (2认同)

Ber*_*ire 67

不,它不会卸载依赖项包:

$ pip install specloud
$ pip freeze
Run Code Online (Sandbox Code Playgroud)

figleaf == 0.6.1
nose == 1.1.2
pinocchio == 0.3
specloud == 0.4.5

$ pip uninstall specloud
$ pip freeze
Run Code Online (Sandbox Code Playgroud)

figleaf == 0.6.1
nose == 1.1.2
pinocchio == 0.3

正如您所看到的,所有软件包仍然存在,但不是specloud软件包本身.

  • specloud`包的独占依赖包呢? (2认同)
  • 重新表述 @Fusion 的问题,如果您已经安装了另一个包(并且该包有它自己的依赖项),您将无法区分哪些依赖项属于哪个包。仅当您拥有干净的初始(虚拟)环境时,此方法才有效。 (2认同)

lin*_*bou 8

我已使用此bash行成功删除了包的依赖项:

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done
Run Code Online (Sandbox Code Playgroud)

这适用于点子1.5.4

  • 虽然从技术上讲,这个解决方案*会成功删除所有依赖项,如其他答案中所述,它**也会卸载对目标**不唯一的依赖项,包括从系统软件包安装的依赖项.例如,在我的系统上,这个脚本最终失败了,因为目标包与pip有共同的依赖关系,所以pip在脚本完成之前卸载了自己的依赖项,然后失败了. (35认同)
  • 注意这只删除了**下一级别的依赖关系**,但**不是这些依赖关系的依赖关系. (18认同)

dav*_*vid 5

我已经找到了解决方案,尽管对某些人来说执行起来可能有点困难。

第一步(对于 python3 和 linux):

pip3 install pip-autoremove  
Run Code Online (Sandbox Code Playgroud)

第二步:

cd /home/usernamegoeshere/.local/bin/  
Run Code Online (Sandbox Code Playgroud)

第三步:

gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/pip_autoremove.py  
Run Code Online (Sandbox Code Playgroud)

并将所有 pip 更改为 pip3
第 4 步:

./pip-autoremove packagenamegoeshere  
Run Code Online (Sandbox Code Playgroud)

至少,这对我有用......