如何在虚拟环境中安装python包而无需再次下载?

问题描述

在 VE 中安装一些软件包时会很麻烦,即使我已经在我的基本环境中使用 conda 或 pip 再次下载它们。由于我的互联网带宽有限,而且我假设我将使用许多不同的 VE,因此下载 OpenCV/Tensorflow 等基本软件包需要很多时间。

解决方法

默认情况下,pip caches 下载任何内容,并尽可能使用缓存版本。这个缓存是 shared between your base environment and all virtual environments。因此,除非您传递 --no-cache-dir 选项,否则 pip 下载包意味着它以前没有下载过该包的兼容版本。如果您已经在您的基础环境或其他虚拟环境中安装了该软件包并且它仍然下载它,这可能意味着以下一项或多项是正确的:

  • 您使用 pip 以外的方法安装了现有版本。
  • 有较新的版本可用,但您没有指定,例如 pip install pandas=1.1.5(如果您在其他地方已有该版本)。 Pip 将为您的环境安装最新的兼容版本,除非您另有说明。
  • 您要安装到的 VE 是不同的 Python 版本(例如,使用 Pyenv 创建),并且需要不同的构建版本。

我对 conda 的细节不太熟悉,而且我似乎在其在线文档中找不到任何关注默认缓存行为的内容。但是,modifying the cache location 的操作方法似乎假定默认行为类似于 pip 的工作方式。也许其他拥有更多 Anaconda 经验的人也可以加入。

因此,除了上述注意事项外,只要您使用与上次相同的方法安装软件包,就不必下载任何内容。

如果您想简化在另一个环境中已有的新 VE 中安装所有相同软件包(通过 pip 安装的)的过程,pip 也可以自动执行此操作。在第一个环境中运行 pip freeze > requirements.txt,并将生成的文件复制到新创建的 VE。在那里,运行 pip install -r requirements.txt 并且 pip 将安装(通过 pip)在第一个环境中安装的所有包。 (请注意,pip freeze 也会记录版本号,因此这不会安装可能可用的更新版本——这是好事还是坏事取决于您的需求。)