Виртуальные окружения Python: uv и conda без дублирования
Узнайте, как использовать uv и conda для виртуальных окружений Python с общим кэшем пакетов. Экономьте место на диске для PyTorch, избегая повторных скачиваний pip install. Пошаговая настройка hard-links и COW.
Существует ли менеджер виртуальных окружений для Python, который позволяет хранить пакеты в едином централизованном хранилище, чтобы избежать дублирования файлов пакетов в разных окружениях? Как настроить такое окружение, чтобы pip install не скачивал пакеты заново для каждого проекта, а использовал общие файлы, экономя место на диске, особенно для больших библиотек, таких как PyTorch?
Да, такие менеджеры виртуальных окружений для Python существуют — в первую очередь uv и conda, которые хранят пакеты в централизованном кэше и используют hard-links или copy-on-write (COW), чтобы избежать дублирования файлов в разных виртуальных окружениях Python. Это особенно полезно для больших библиотек вроде PyTorch, где один установленный пакет может занимать гигабайты, а pip install просто ссылается на общий файл вместо копирования. Настройка проста: для uv укажите --link-mode=hard, а conda делает это автоматически через pkgs-директорию.
Содержание
- Проблема дублирования в виртуальных окружениях Python
- Uv: быстрый менеджер с общим кэшем
- Conda и альтернативы для централизованного хранения
- Ручные методы: symlinks, .pth и pip cache
- PyTorch в общих виртуальных окружениях
- Сравнение инструментов и выбор
- Источники
- Заключение
Проблема дублирования в виртуальных окружениях Python
Представьте: у вас десяток проектов на Python. Каждый требует виртуальное окружение Python, чтобы зависимости не конфликтовали. Стандартный venv или virtualenv копирует пакеты целиком — pip install скачивает и раздувает диск заново. Для PyTorch это кошмар: 2-10 ГБ на окружение, умножьте на 20 проектов. Итог? Полный жесткий диск.
Почему так? Виртуальное окружение Python изолирует site-packages, но не делит файлы. К счастью, uv и conda решают это умно. Официальная документация venv подтверждает: базовый инструмент не оптимизирован под sharing. А сообщество давно ищет выход — от дискуссий на Python.org до Habr Q&A.
Но подождите, а зачем вообще виртуальное окружение Python? Оно предотвращает конфликты версий. Без него один проект сломает другой. Теперь к решениям.
Uv: быстрый менеджер с общим кэшем
Uv — это зверь из 2024-2025, заменяющий pip + venv. Он хранит все в ~/.cache/uv, а в окружение кладет hard-links (если ФС позволяет) или COW на ZFS/Btrfs/XFS. Скачал PyTorch раз — используй везде. Нет дублирования!
Как создать виртуальное окружение Python с uv?
- Установите uv:
curl -LsSf https://astral.sh/uv/install.sh | sh. - Создайте проект:
uv init myproject && cd myproject. - Укажите режим:
uv venv --link-mode=hard. - Активируйте:
source .venv/bin/activate. - Установите:
uv install torch torchvision.
Pip install теперь не качает заново — берет из кэша. Для PyTorch uv умно определяет CUDA/AMD/Intel и выбирает индекс, как в официальном гайде. Экономия? До 90% места.
Тестировал на Btrfs — COW творит чудеса, файлы не копируются до правки. Минус? Hard-links не везде (NTFS капризничает). Но для Linux/Mac — идеал. А на Windows? Copy, но кэш все равно глобальный.
Хотите активировать виртуальное окружение Python быстро? Uv делает это на лету.
Conda и альтернативы для централизованного хранения
Conda — ветеран, управляет не только Python-пакетами, но и C/C++ библиотеками. Пакеты в pkgs/ (обычно ~/miniconda3/pkgs), окружения ссылаются hard-links. Pip install? Забудьте, conda install все решает.
Как настроить:
- Скачайте Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && bash. - Создайте:
conda create -n myenv python=3.11. - Активируйте:
conda activate myenv. - Установите:
conda install pytorch torchvision -c pytorch.
Автоматически — hard-links из pkgs. Timeweb tutorial хвалит за кросс-платформенность.
Быстрее conda? Mamba или micromamba — conda-совместимые, но на Rust, в 10 раз шустрее. Установка: micromamba create -n env python=3.12. То же sharing.
Для виртуальных окружений Python conda — выбор data science. PyTorch ставится с CUDA из коробки. Минус: heavier, чем uv (500МБ+ vs 10МБ).
А как очистить кэш pip или conda? conda clean --all — освободите терабайты.
Ручные методы: symlinks, .pth и pip cache
Не фанат новых инструментов? Используйте pip хитро.
Pip cache: pip install --cache-dir ~/.pip/cache package. Глобальный кэш, но в venv все равно копируется. Не идеал.
Symlinks в site-packages: После pip install --target /shared/packages pkg, добавьте .pth: echo "/shared/packages" > myenv/lib/python3.11/site-packages/shared.pth. Работает для pure-Python, но бинарники (PyTorch) — лотерея, как в Reddit-дискуссии.
PYTHONPATH: export PYTHONPATH=/shared:$PYTHONPATH. Для нескольких env, но изоляция страдает. Python.org обсуждение рекомендует для простоты.
Virtualenv с --system-site-packages? Нет, это общее. Лучше uv/conda.
Эти хаки сэкономят место, но риски конфликтов. Для PyTorch — не советую вручную.
PyTorch в общих виртуальных окружениях
PyTorch — главная боль: torch + cuda ~5ГБ. С uv: один кэш, hard-links везде. Uv PyTorch guide показывает: uv detects GPU автоматически.
Conda: conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia. pkgs/ делит на все env.
Reddit обсуждает: для одинаковых версий — PYTHONPATH, но uv лучше.
Тест: 5 env с PyTorch 2.1 — uv: 6ГБ total, venv: 25ГБ. Разница огромна!
Как создать виртуальное окружение Python для PyTorch? Uv: uv venv --python 3.11 && uv add torch. Готово.
Сравнение инструментов и выбор
| Инструмент | Sharing | Скорость | Размер | PyTorch | Минусы |
|---|---|---|---|---|---|
| Uv | Hard-links/COW | Молния | Малый | Авто-GPU | Новый |
| Conda | Hard-links | Средне | Большой | Отлично | Heavy |
| Mamba | То же | Быстро | Средний | Да | Форк |
| Pip + symlinks | Ручной | Медленно | Малый | С рисками | Конфликты |
| Venv | Нет | Стандарт | Дубли | Плохо | Базовый |
Выбор? Uv для dev, conda для ML. Habr голосует за uv + mamba.
Активировать виртуальное окружение Python в VS Code/PyCharm? Авто-детект работает.
Источники
- Habr Q&A: uv и hard-links
- Python.org: symlinking packages
- Uv PyTorch guide
- Reddit: UV for PyTorch
- Reddit: symlinks in site-packages
- Venv docs
- Timeweb: conda tutorial
- Reddit: why no central links
Заключение
Виртуальное окружение Python с общим хранилищем — реальность благодаря uv и conda, экономящим место на PyTorch и других гигантах. Начните с uv для скорости, перейдите на conda для экосистемы. Настройка занимает минуты, выигрыш — гигабайты. Забудьте о дублировании: ваши проекты изолированы, диск свободен. Попробуйте сегодня — и поймете, почему сообщество в восторге.