Почему пакеты устанавливаются, а не просто связаны с определенной средой? - PullRequest
3 голосов
/ 08 апреля 2019

Я заметил, что обычно, когда пакеты устанавливаются с использованием различных менеджеров пакетов (для python), они устанавливаются в /home/user/anaconda3/envs/env_name/ на conda и в /home/user/anaconda3/envs/env_name/lib/python3.6/lib-packages/ с использованием pip на conda.

Но conda также кэширует все недавно загруженные пакеты.

Итак, мой вопрос: почему conda не устанавливает все пакеты в центральном месте, а затем при установке в определенной среде создаетссылка на каталог, а не на его установку?

Я заметил, что среды становятся достаточно большими и что этот метод, вероятно, сможет сэкономить немного места.

1 Ответ

3 голосов
/ 10 апреля 2019

Конда уже делает это .Они используют жесткие ссылки, поэтому вы можете переоценить пространство, которое действительно используется, если вы посмотрите только на размер определенного env.

Чтобы проиллюстрировать ситуацию, давайте используем 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

, как это может выглядеть в графическом интерфейсе.

Вместо этого, если я позволю 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 полон архивов и замененных пакетов, плюс инфраструктура, которую я храню в база (например, Jupyter, Git и т. д.).

...