提问者:小点点

为什么安装软件包而不仅仅是链接到特定的环境?


我注意到,通常使用各种包管理器(对于python)安装包时,它们会安装在conda上的/home/user/anaconda3/envs/env_name//home/user/anaconda3/envs/env_name/lib/python3中。6/lib包/在conda上使用pip。

但是康达也会缓存所有最近下载的软件包。

所以,我的问题是:为什么conda不在一个中心位置安装所有的包,然后当安装在一个特定的环境中时,创建一个到目录的链接,而不是在那里安装它?

我注意到环境变得相当大,这种方法可能能够节省一点空间。


共1个答案

匿名用户

康达已经这样做了。但是,由于它利用了硬链接,因此很容易高估实际使用的空间,特别是如果一次只查看单个环境的大小。

为了说明这个案例,让我们使用du来检查真正的磁盘使用情况。首先,如果我单独计算每个环境目录,我会得到每个环境的未更正使用情况

$ for d in envs/*; do du -sh $d; done
2.4G    envs/pymc36
1.7G    envs/pymc3_27
1.4G    envs/r-keras
1.7G    envs/stan
1.2G    envs/velocyto

这就是它在GUI中的外观。

相反,如果我让du一起计算它们(即,纠正硬链接),我们会得到

$ du -sh envs/*
2.4G    envs/pymc36
326M    envs/pymc3_27
820M    envs/r-keras
927M    envs/stan
548M    envs/velocyto

人们可以看到,这里已经节省了大量的空间。

大多数硬链接都返回到pkgs目录,因此如果我们也包括该目录:

$ du -sh pkgs envs/*
8.2G    pkgs
400M    envs/pymc36
116M    envs/pymc3_27
 92M    envs/r-keras
 62M    envs/stan
162M    envs/velocyto

可以看到,在共享包之外,环境相当轻。如果您关心我的pkgs的大小,请注意,我从未在这个系统上运行过conda clean,因此我的pkgs目录中充满了tarball和被取代的包,以及我保留在base中的一些基础设施(例如,Jupyter、Git等)。