包可以在Anaconda环境中共享吗?

use*_*039 17 python anaconda conda

我的~/anaconda目录占用了太多的磁盘空间(10GB),虽然我只有五个环境并且已经运行conda clean.我发现当我尝试创建一个新的conda环境时,Anaconda会显示一个很长的要下载的包列表,其中包括一个完整的科学Python堆栈(Python解释器,numpy,scipy等).似乎Anaconda正在为每个环境独立安装所有东西.这是真的?

以下列表包含一些可能解决空间问题的纯粹推测方法:

  • 我可以创建一个"继承""父环境"包的"子环境"吗?
  • 是否可以使Anaconda与不同环境中使用的相同包共享(例如,通过文件系统上的符号链接)?
  • 默认环境在包管理方面是否具有任何特殊状态?我使用Anaconda 2,但我的大多数环境都使用Python 3.我可以通过切换到Anaconda 3来节省空间吗?(这是将默认环境视为所有其他环境的"父环境".)
  • 我通常pip用来安装包,因为conda install经常失败.是否conda install做了一些聪明的工作重用已经安装在其他地方包?

(调试信息)我的四个环境目录的大小~/anaconda/envs介于1.2GB和2.6GB之间.这是正常的吗?

小智 5

我相信您的主要问题的答案在于Anaconda 与 Miniconda之间的区别。Anaconda 包含一长串软件包,这些软件包会自动安装到您创建的每个环境中。Miniconda 创建准系统 conda 虚拟环境(根本不包含很多包)。切换到 Miniconda 应该会大大减少您环境中包的大小/数量。Anaconda 大约 2GB,而 Miniconda 接近 100MB。

Conda 还对安装的软件包使用硬链接conda install。可以在此处找到有关硬链接的详细说明。它们基本上将跨多个环境的依赖项链接起来,就像您在上面描述的那样。通过安装的软件包pip没有硬链接,因此它们无法利用 conda 软件包提供的空间节省。


6ry*_*y0u -1

要创建“继承”包的环境:
您可以导出/导入与 yaml 文件一起使用的包的名称。
或者使用--clone标志。
看到这个答案

  • 通过导出/导入环境,您仍然需要额外的磁盘空间来安装新环境的软件包,这没有抓住问题的重点。 (8认同)