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

时间:2018-05-17 15:19:30

标签: 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之间。这是正常的吗?

2 个答案:

答案 0 :(得分:3)

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

Conda还对安装的软件包与conda install使用硬链接。可以在here中找到对硬链接的良好描述。它们基本上将跨多个环境的依赖关系链接到了您上面所述的位置。通过pip安装的软件包未进行硬链接,因此无法利用conda软件包所提供的空间节省。

答案 1 :(得分:0)

要创建“继承”软件包的环境:
您可以导出/导入与yaml文件一起使用的软件包的名称。
或使用--clone标志。
参见this answer