【问题标题】:Why are packages installed rather than just linked to a specific environment?为什么要安装软件包而不是仅仅链接到特定环境?
【发布时间】:2019-04-08 04:48:49
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python pip conda package-managers


    【解决方案1】:

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

    为了说明情况,让我们使用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 目录充满了压缩包和被取代的包,以及我保留在 中的一些基础设施基础(例如,Jupyter、Git 等)。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      相关资源
      最近更新 更多