为什么要安装包而不是仅链接到特定环境?
Why are packages installed rather than just linked to a specific environment?
我注意到通常在使用各种包管理器(对于 python)安装包时,它们在 conda 上安装在 /home/user/anaconda3/envs/env_name/
中,在 conda 上使用 pip 安装在 /home/user/anaconda3/envs/env_name/lib/python3.6/lib-packages/
中.
但是 conda 也会缓存所有最近下载的包。
所以,我的问题是:
为什么 conda 不将所有软件包安装在一个中央位置,然后在特定环境中安装时创建一个 link 到目录而不是在那里安装它?
我注意到环境变得很大,这种方法可能会节省一些 space。
Conda 已经这样做了。但是,因为它利用了 硬链接 ,所以很容易高估真正使用的 space,特别是如果一次只查看单个环境的大小。
为了说明这个案例,让我们使用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
可以看到这里已经保存了大量 space。
大部分硬链接都返回到 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 和被取代的包,加上我在 base 中保留的一些基础设施(例如,Jupyter、Git 等)。
我注意到通常在使用各种包管理器(对于 python)安装包时,它们在 conda 上安装在 /home/user/anaconda3/envs/env_name/
中,在 conda 上使用 pip 安装在 /home/user/anaconda3/envs/env_name/lib/python3.6/lib-packages/
中.
但是 conda 也会缓存所有最近下载的包。
所以,我的问题是: 为什么 conda 不将所有软件包安装在一个中央位置,然后在特定环境中安装时创建一个 link 到目录而不是在那里安装它?
我注意到环境变得很大,这种方法可能会节省一些 space。
Conda 已经这样做了。但是,因为它利用了 硬链接 ,所以很容易高估真正使用的 space,特别是如果一次只查看单个环境的大小。
为了说明这个案例,让我们使用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
可以看到这里已经保存了大量 space。
大部分硬链接都返回到 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 和被取代的包,加上我在 base 中保留的一些基础设施(例如,Jupyter、Git 等)。