如何在虚拟环境中安装Python包而不需要重新下载?

4

在VE中安装某些软件包时,当我已经在基本环境中拥有这些软件包时,使用conda或pip会再次下载它们,这非常麻烦。由于我的网络带宽有限,我假设我将与许多不同的VE一起使用,因此下载基本软件包(如OpenCV / TensorFlow)需要很长时间。

1个回答

4

默认情况下,pip会缓存它下载的所有内容,并在可能的情况下使用缓存版本。这个缓存是基础环境和所有虚拟环境之间共享的。因此,除非你传递--no-cache-dir选项,否则pip下载一个包意味着它以前没有下载过兼容版本的该包。如果你已经在基础环境或另一个虚拟环境中安装了该包,但它仍然下载了它,那么这可能意味着以下一个或多个条件成立:

  • 你使用pip以外的方法安装了现有版本。
  • 有一个更新的版本可用,而你没有指定,例如,pip install pandas=1.1.5(如果那是你在其他地方已经拥有的版本)。除非你告诉它不这样做,否则pip将为你的环境安装最新的兼容版本。
  • 你要安装到的VE是不同的Python版本(例如,使用Pyenv创建),需要不同的构建。
我对conda的具体细节不太熟悉,在其在线文档中似乎找不到关于默认缓存行为的任何内容。然而,修改缓存位置 的操作指南似乎假定默认行为类似于pip的工作方式。也许有更多Anaconda经验的其他人也可以加入讨论。
因此,除了上述警告之外,只要您使用与上次相同的方法安装软件包,就不必下载任何内容。
如果您想简化在新环境中安装与上一个环境相同的所有软件包(通过pip安装)的过程,pip也可以自动执行此操作。在第一个环境中运行pip freeze > requirements.txt,然后将生成的文件复制到新创建的环境中。在那里,运行pip install -r requirements.txt,pip将安装在第一个环境中安装(通过pip)的所有软件包。(请注意,pip freeze还记录版本号,因此这不会安装可能可用的更新版本--无论这是好事还是坏事取决于您的需求。)

非常感谢!我有最后一个问题,在conda缓存文件夹配置中,我假设我可以选择自己的目录,对吗?但是那样一来,我将无法直接安装捆绑在conda中的软件包,而必须至少自己安装一次? - Banana Bamboo
2
实际上,我似乎误读了我链接的Anaconda页面。(我已经编辑了我的回答。)据我所知,conda install 基本上与 pip install 做的事情相同,因为它会缓存它下载的所有内容,并在可能的情况下从缓存中重用。我不确定它是否在环境之间共享,但它肯定是所暗示的。 - CrazyChucky

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