pip使用了错误的缓存软件包版本,而不是用户指定的版本。

675

我需要安装特定版本的psycopg2 v2.4.1。我不小心执行了以下操作:

 pip install psycopg2

不要:

 pip install psycopg2==2.4.1
那将安装版本为2.4.4而不是之前的版本。
即使我通过pip uninstall psycopg2并尝试使用正确的版本重新安装,看起来pip仍然在重复使用它第一次下载的缓存。
如何强制pip清除其下载缓存并使用我在命令中指定的特定版本?
19个回答

706
如果使用的是 pip 6.0 或更新版本,请尝试添加 --no-cache-dir 选项(source)。
如果使用的是早于 pip 6.0 的版本,请使用 pip install -U pip 进行升级。

8
我查看了 ~/.pip 目录,但它是空的。你提供的 --ignore-installed 参数起了作用! - Geuis
8
在 OSX 上,我需要删除 $TMPDIR 中与 pip 相关的目录。 - Bryan P
3
如果使用 virtualenv,您可能需要删除 envs/{yourenvsname}/build/{packageinquestion} 目录... - Vajk Hermecz
7
在Windows系统中,我发现pip的缓存目录位于~\AppData\Local\pip\cache。 - Mercury
6
这个答案只有部分正确。--no-cache-dir不会删除缓存文件夹的内容。 - NONONONONO
显示剩余2条评论

634
清除适用于您系统的缓存目录。
Linux和Unix。
~/.cache/pip  # and it respects the XDG_CACHE_HOME directory.

OS X

->

操作系统 X

~/Library/Caches/pip

Windows

%LocalAppData%\pip\Cache

更新

使用pip 20.1或更高版本,在命令行中输入以下内容,即可轻松找到您操作系统的完整路径:

pip cache dir

在我的Ubuntu安装上的示例输出:

➜ pip3 cache dir
/home/tawanda/.cache/pip

67
目前最新的答案(由pip维护者发布)是https://dev59.com/iGkw5IYBdhLWcg3w_fiJ#61762308。现在最好的方法是`pip cache purge`。 - pradyunsg
16
根据您提供的链接回答,pip cache purge 只适用于 pip 20.1 版本。该回答似乎适用于所有 pip 版本和所有平台,这使其更加通用,但我不确定是否是这种情况。 - Hannes

354

使用 pip 20.1 或更新版本,你可以执行以下操作:

  • pip cache remove matplotlib:从 pip 缓存中删除与 matplotlib 相关的所有 wheel 文件。
  • pip cache purge:清除 pip 缓存中的所有 wheel 文件。
  • pip cache dir:获取缓存的位置。

如果出于某种原因你不想使用 pip 缓存(根据 官方文档,这是个不好的想法),你有以下选项:

  • pip install --no-cache-dir <package>:在本次运行中不使用缓存安装包。
  • pip config set global.no-cache-dir false:配置 pip 在所有命令中都不使用缓存。

一些相关历史 (戴上 pip 维护者帽子):

提到的“由于缓存而安装错误版本”的具体问题在 2013 年的 pip 1.4 中已修复!

修复了许多与清理和不重用构建目录相关的问题。(#413, #709, #634, #602, #939, #865, #948)

自从 pip 6.0(2014 年)以来,pip installpip downloadpip wheel 命令可以通过 --no-cache-dir 选项告诉它们不要使用缓存。(例如:pip install --no-cache-dir <package>

早先时候,是的,传递--no-cache-dir是避免此问题的唯一选择。所以......很遗憾这是“pip cache remove”搜索结果的最佳选择。:)

自pip 10.0(2018年),增加了pip config 命令,可用于配置pip始终忽略缓存。虽然手动编辑相关文件一直都可以实现,但这将该功能呈现在命令行中。有关pip配置机制的详细信息,请参阅此处

自pip 20.1以来,pip具有pip cache 命令来管理pip缓存的内容。


4
我有pip 20.1.1,但当我尝试运行pip cache purge时,出现以下错误:ERROR:No matching packages,但我已经安装了很多不同的软件包。 - Mikhail_Sam
3
如果 pip cache list 命令没有显示任何内容,那么你没有缓存任何内容。请尝试使用该命令。 - Robert Lugg
2
对我来说,“pip cache purge”和“pip cache list”表明缓存为空,但是“du -hs ~/.cache/pip”显示242MB。 - Carl
5
我遇到一个错误:ERROR: unknown command "cache" - maybe you meant "check"。意思是出现未知命令“cache”,可能是你想输入的是“check”。 - Alex
1
@Alex 你使用的 pip 版本低于 20.1。 - pradyunsg
显示剩余3条评论

109

根据https://pip.pypa.io/en/latest/reference/pip_install.html#caching文档:

从 v6.0 版本开始,pip 提供了一个默认启用的缓存,其类似于 web 浏览器中的缓存。虽然默认情况下缓存已启用,并且默认情况下会按照正确的方式进行操作,但您可以通过使用 --no-cache-dir 选项禁用缓存并始终访问 PyPI。


2
这是正确的答案...该链接还显示了pip在Linux、Windows和OS X上存储缓存的位置。 - jasonjwwilliams
5
另外,如果你想从缓存中删除“不良”对象,请查看页面以找到缓存文件的位置,并“查找”有问题的软件包。Linux 的路径是 ~/.cache/pip,Mac 的路径是 ~/Library/Caches/pip 等。有趣的是,psycopg2 也是我的问题软件包,但这是因为现有的软件包是为不再存在于我的服务器上的另一个 Postgresql 库编译的。 - Chris Cogdon

95

pip可以忽略缓存安装包,如下所示

pip --no-cache-dir install scipy

16
@dafeda的回答在4个月前提供了相同的信息。 - Foon

45

那pip3呢?使用pip3我得到了“ERROR: unknown command "cache" - maybe you meant "check"`。 - Zorro
1
那么可能你应该升级你的pip(或者pip3,因为Python 2已经被淘汰了):pip install --upgrade pip 或者 pip3 install --upgrade pip - Bence Mélykúti
即使更新了 pip,我仍然会收到错误提示 ERROR: unknown command "cache" - maybe you meant "check" - Alex

32
在Ubuntu上,我需要删除/tmp/pip-build-root

3
实际上,/tmp/pip-build-%运行pip的用户名%。 - Alexey Sviridov
2
在Ubuntu 14上,它是/tmp/pip_build_root/(注意下划线)。 - Emil Stenström

16

如果您想默认设置--no-cache-dir选项,可以将其放入pip.conf文件中:

[global]
no-cache-dir = false

注意1:这很令人困惑,但要启用no-cache-dir选项,实际上必须将其设置为false。如果你问我,这相当愚蠢...但事实就是如此。有一个GitHub问题来解决这个问题。

注意2:pip.conf的位置取决于您的操作系统。有关更多信息,请参见文档


3
他们现在已经争论了3年,关于使用False而不是True来激活选项的正当性问题吗?-真的吗? - Kochise

9

我之前遇到了类似的问题,发现唯一升级pip软件包的方法是删除 $PWD/build(Windows系统下为%CD%\build)目录,该目录可能是由以前未完成的安装或旧版本的pip留下来的(现在pip在成功安装后会自动删除构建目录)。


8
在 Arch Linux 上,pip 缓存位于 ~/.cache/pip 目录下,我可以通过删除其中的 http 文件夹来解决我的问题。

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