Существует ли менеджер виртальных окружений для python, который хранит все пакеты в одном месте?
Существует ли менеджер виртальных окружений для python, который хранит все пакеты в одном месте, благодаря чему пакеты с одной и той же версией не дублируются?
Сейчас, когда я создаю новое окружение через python -m venv, активирую новое окружение и затем в новое окружение делаю pip install <пакет>, то пакет заново качается из интернета
и заново занимает место на диске в папке данного виртуального окружения.
Например, если есть разных 10 проектов, использующих PyTorch, который для версии CUDA весит 4 гига - то в итоге всё вместе займет 40 гигов на диске минимум.
Может есть какой то менеджер окружений, который хранит все пакеты в одном месте, а в папки виртуальных окружений лишь закидывает ссылки на файлы пакетов?
А по факту со временем у тебя в разных проектах будет разные версии пакетов и проблема опять возникнет. Ну и это скорее проблема PyTorch, вот у меня, например, куча бекенд проектов и проблемы с местом нет. Возможно тут нужны решения на другом уровне, например, файловые системы с возможность дедубликации.
conda/mamba (и micromamba)/uv умеют хранить пакеты в одном месте и при создании окружения делать хардлинки (если они на одном диске), uv умеет делать copy-on-write для cow файловых систем типа zfs/btrfs/xfs, в этом случае даже при редактировании файла он поменяется только там где меняли но при этом место на диске при копировании не тратится (только метаинформация, там по кластерам fs хранение идет).
Рекомендую uv, так как по факту там тот же python -m venv но подменяется сам pip установщик плюс фишки по управлению версиями.
p.s. есть утилита duperemove которую просто натравливаешь на каталог, и она заменяет копии файлов на их copy-on-write вариант, это вообще не требует ничего менять в используемых утилитах, а просто вручную запускать ее после заметных обновлений, как минимум сэкономишь место