pip:从特定目录卸载软件包

38

我使用pip install -t <dir>将软件包安装到特定的本地目录中。

现在我想卸载它,但我找不到从那个特定目录卸载的方法。对于uninstall命令,没有有效的选项-t | --target,这个选项只存在于install命令中。


如果你运行 pip list 命令,你能看到这个包吗? - doru
不,pip list 显示的是全局包列表。 - Denis Itskovich
我认为如果那个文件夹只包含一个软件包,你可以简单地删除那个文件夹;如果文件夹里还有其他软件包,你可以删除其中的软件包。 - doru
那个文件夹是我为特定项目安装的所有软件包的顶层文件夹。我不能删除它。我只需要删除单个软件包及其所有依赖项。类似于pip install -t <dir>的“撤消”操作。 - Denis Itskovich
1个回答

30

请手动删除它们。 pip 不会保留已安装软件包的隐藏目录,并直接扫描目录(如/usr/local/lib/python2.7/dist-packages)以确定已安装的内容。

因此,如果您使用-t安装了某些东西,只需转到指定的目录并删除所有痕迹,包括任何元数据文件。例如:

$ mkdir localpips
$ pip install -t localpips docopt
Downloading/unpacking docopt
  Downloading docopt-0.6.2.tar.gz
  Running setup.py (path:/tmp/pip_build_garyw/docopt/setup.py) egg_info for package docopt

Installing collected packages: docopt
  Running setup.py install for docopt

Successfully installed docopt
Cleaning up...
$ cd localpips
$ ls -l
total 48
drwxr-xr-x 2 garyw garyw  4096 Jul  6 17:27 docopt-0.6.2.egg-info
-rw-r--r-- 1 garyw garyw 19946 Jul  6 17:27 docopt.py
-rw-r--r-- 1 garyw garyw 23326 Jul  6 17:27 docopt.pyc
$ 

要卸载它,只需进入localpips并删除创建的文件和目录即可。
我知道这不太优雅,有时候如果你没有仔细观察安装过程,你可能不知道哪些文件是相关的,但事实就是这样。

你说得对,它并没有被隐藏。我的问题是关于软件包依赖性的。我安装了多个软件包。每个软件包都会安装其依赖项。现在我需要删除其中一个软件包及其依赖项(但仅在它们未被其他软件包使用的情况下)。这不是一项简单的任务。我确信应该有一个与 pip install -t <...> 相反的命令。 - Denis Itskovich
1
遗憾的是,pip没有强大的依赖项跟踪器,因此删除一个包(即使在系统目录中)也不会删除其依赖项。虽然有一种标准的方式来声明包的要求,但由于没有保留任何给定时间需要什么的数据库,因此无论您是否使用“-t”,都没有卸载“带依赖项”的选项。在github上有一个名为pip-autoremove的软件包进行分析和删除,但它不支持自定义目录。 :-( - Gary Wisniewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接