我注意到通常在使用各种包管理器(对于python)安装包时,它们使用pda on conda安装在conda上的/home/user/anaconda3/envs/env_name/
和/home/user/anaconda3/envs/env_name/lib/python3.6/lib-packages/
中。
但conda也会缓存所有最近下载的软件包。
所以,我的问题是:为什么conda不在中央位置安装所有软件包,然后在特定环境中安装时创建指向该目录的链接而不是在那里安装它?
我注意到环境变得非常大,这种方法可能会节省一些空间。
康达已经这样做了。他们利用硬链接,所以如果你只看一个特定环境的大小,你可能会过高估计真正使用的空间。
为了说明这种情况,让我们使用du
来检查真正的磁盘使用情况。首先,如果我单独计算每个环境目录,我会得到未经修正的每个env用法
$ 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
可以看出,在共享包之外,envs相当轻。如果您担心我的pkgs
的大小,请注意我从未在此系统上运行conda clean
,因此我的pkgs
目录中充满了tarball和被取代的软件包,以及我保留在基础中的基础结构(例如,Jupyter,Git等)。