检查目录属性时,conda 环境的磁盘使用率似乎比实际情况大?

dan*_*cab 3 diskspace conda

首先,我是虚拟环境的新手,我没有软件背景(英语也不是我的母语,所以请宽恕)。我确信 conda 环境以某种方式进行了优化,不会重复磁盘上的包,而是以某种方式使用链接。但是当检查使用的硬盘空间时(通过右键单击 -> 属性,在 Linux Mint 上)它看起来非常高:超过 2 GB(环境有 python、numpy 和 pandas)。

谁能告诉我(或指出方向)这是如何工作的?

Stu*_*erg 10

对于该软件包列表来说 2 GB 似乎太高了。我刚刚做了一个测试。在 Linux 上,这样的环境占用 1.2 GB。在 Mac 上,它仅需要 271 MB。(我不完全确定是什么导致了两者之间的差异,但它可能与不同的文件系统有关。)

您是在检查单个环境的大小,还是在检查整个 anaconda 目录树的大小?

关于 conda 中的磁盘保存技巧:你是对的,conda 使用硬链接(如果可能)来避免在磁盘上重复文件。这有助于节省磁盘空间,否则同一个文件将在多个环境中以及 conda 包缓存 ( pkgs) 中重复。不幸的是,conda 无法创建某些文件的硬链接(出于技术原因),因此它必须复制这些文件。

du工具可以告诉您特定目录(或目录列表)占用了多少磁盘空间。它知道硬链接,因此如果同一文件由于硬链接而出现两次,它可以避免重复计算文件大小。(我不知道 Linux Mint 中的“属性”菜单项是否有同样的行为。)

例如,我将创建两个相同的 conda 环境并独立检查它们的磁盘使用情况:

$ conda create -n test-1 -y python numpy pandas
$ conda create -n test-2 -y python numpy pandas

$ du -h -s $(conda info --base)/envs/test-1
1.2G    /opt/miniconda/envs/test-1

$ du -h -s $(conda info --base)/envs/test-2
1.2G    /opt/miniconda/envs/test-2
Run Code Online (Sandbox Code Playgroud)

但如果我要求同时du考虑它们,它会注意到其中的一些文件已经在 中看到,因此它不会再次计算它们的大小:test-2test-1

$ du -h -s $(conda info --base)/envs/test-?
1.2G    /opt/miniconda/envs/test-1
268M    /opt/miniconda/envs/test-2
Run Code Online (Sandbox Code Playgroud)

如果您想知道哪些文件是硬链接的,请查看以下输出ls -l

$ ls -l $(conda info --base)/envs/test-1/lib/libz.so.1.2.11
-rwxrwxr-x 15 bergs flyem 109272 Sep  9  2019 /opt/miniconda/envs/test-1/lib/libz.so.1.2.11
           ^
            `-- This file has 15 different names,
                i.e. it can be found in 15 different places on disk,
                due to hard-links.

$ ls -l $(conda info --base)/envs/test-1/lib/libpython3.8.so.1.0
-rwxrwxr-x 1 bergs flyemdev 14786920 Jun 16 12:44 /opt/miniconda/envs/test-1/lib/libpython3.8.so.1.0
           ^
            `-- This file has only 1 name on disk,
                i.e. there are no other hard-links to this file.
Run Code Online (Sandbox Code Playgroud)


Don*_*d S 5

如果您担心用完磁盘空间,可以运行此命令来清理 conda 用于设置环境的所有临时包、zip 文件等。

conda clean --all
Run Code Online (Sandbox Code Playgroud)

这些文件会保留下来,随着时间的推移可能会弄乱您的磁盘。

我经常使用它,每次都能获得超过几 GB 的收益。