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

问题描述 投票:3回答:1

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

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

所以,我的问题是:为什么conda不在中央位置安装所有软件包,然后在特定环境中安装时创建指向该目录的链接而不是在那里安装它?

我注意到环境变得非常大,这种方法可能会节省一些空间。

python pip conda package-managers
1个回答
3
投票

康达已经这样做了。他们利用硬链接,所以如果你只看一个特定环境的大小,你可能会过高估计真正使用的空间。

为了说明这种情况,让我们使用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等)。

© www.soinside.com 2019 - 2024. All rights reserved.