Шпаргалка по Python venv
некоторые полезные команды venv
Venv — это инструмент командной строки для управления виртуальными средами. Он гораздо проще, чем Anaconda. Вот некоторые полезные команды venv.
Просто чтобы вы знали, что, по моему мнению, есть гораздо лучший инструмент для управления пакетами и средами в Python, чем venv — uv. Ознакомьтесь: uv - Новый менеджер пакетов, проектов и сред Python
Шпаргалка по Python venv
Создание виртуальной среды
-
Стандартная команда (Python 3.3+):
python -m venv venv
Это создает виртуальную среду с именем
venv
в текущей директории. -
С конкретной версией Python (если установлена):
python3.10 -m venv venv
или с использованием
virtualenv
:virtualenv -p /usr/local/bin/python3.10 venv
(Требуется пакет
virtualenv
).
Активация виртуальной среды
- В Windows:
.\venv\Scripts\activate
- В macOS/Linux:
Теперь приглашение командной строки должно отображать имя среды.source venv/bin/activate
Деактивация виртуальной среды
- На всех платформах:
Это вернет вас к системному Python.deactivate
Установка пакетов
- С pip:
Пример:pip install
pip install numpy pandas
- Обновление pip (рекомендуется):
python -m pip install --upgrade pip
Фиксация и экспорт зависимостей
- Сохранение текущих пакетов среды:
pip freeze > requirements.txt
- Установка из файла зависимостей:
Убедитесь, что виртуальная среда активирована перед выполнением этих команд.pip install -r requirements.txt
Удаление виртуальной среды
deactivate
rm -rf <путь к среде>
Частые ошибки при управлении Python виртуальными средами
Забывка активировать виртуальную среду
- Частая ошибка — выполнение команд без активации нужной виртуальной среды, что приводит к установке пакетов в глобальную среду или неправильную venv. Это может вызвать конфликты зависимостей и непредсказуемое поведение.
Не фиксирование версий пакетов
- Использование свободных спецификаторов версий (например,
>=
вместо==
) вrequirements.txt
снижает воспроизводимость. Точная фиксация версий гарантирует, что все участники проекта используют одинаковые версии пакетов, предотвращая неожиданные проблемы при развертывании или совместной работе.
Смешивание глобальных и виртуальных сред
- Случайная установка пакетов глобально или смешивание глобальных и виртуальных сред может вызвать конфликты, особенно если разные проекты требуют несовместимых версий пакетов. Всегда убедитесь, что вы работаете в правильной среде.
Добавление виртуальных сред в систему контроля версий
- Включение директории виртуальной среды (например,
venv/
) в систему контроля версий увеличивает размер репозитория и не является необходимым. Всегда добавляйте директории venv в.gitignore
, чтобы поддерживать чистоту репозитория.
Не разделение зависимостей разработки и продакшена
- Не различение зависимостей разработки и продакшена может привести к избыточным или небезопасным развертываниям. Используйте отдельные файлы зависимостей или разделы конфигурации для каждого.
Отсутствие документации и автоматизации
- Не документирование шагов настройки среды или отсутствие автоматизации (с помощью скриптов или Makefiles) усложняет привлечение новых участников и воспроизведение сред.
Не регулярная очистка старых сред
- Со временем могут накапливаться ненужные виртуальные среды, занимая дисковое пространство и вызывая путаницу. Регулярно удаляйте устаревшие venv, чтобы поддерживать порядок в рабочей среде.
Игнорирование системного Python и границ менеджера пакетов
- Изменение системного Python или смешивание системного менеджера пакетов с pip может сломать системные инструменты и вызвать сложные для диагностики проблемы. Всегда используйте venv для зависимостей проектов и избегайте вмешательства в системные пакеты.
Сводная таблица
Ошибка | Влияние |
---|---|
Забывка активировать venv | Установка пакетов в неправильную среду |
Не фиксирование версий пакетов | Непредсказуемые сборки, сложные для воспроизведения ошибки |
Смешивание глобальных и виртуальных сред | Конфликты зависимостей/версий |
Добавление venv директорий в систему контроля версий | Перегруженные, беспорядочные репозитории |
Не разделение зависимостей разработки и продакшена | Перегруженные/небезопасные продакшен-среды |
Отсутствие документации/автоматизации | Сложное привлечение, несоответствующие настройки |
Не очистка старых сред | Потеря дискового пространства, путаница |
Изменение системного Python или пакетов | Нестабильность системы, сломанные инструменты |
Соблюдение лучших практик — таких как всегда активация venv, фиксация зависимостей, разделение сред и поддержание четкой документации — поможет вам избежать этих распространенных ошибок.
Ключевые различия между Conda и виртуальными средами для воспроизводимости
Характеристика | Conda среды | Python виртуальные среды (venv/virtualenv) |
---|---|---|
Область управления | Управляет Python пакетами и не-Python зависимостями (например, системные библиотеки, компиляторы) | Управляет только Python пакетами через pip |
Управление версиями Python | Может указывать и устанавливать любую версию Python для среды | Использует установленную в системе версию Python |
Кроссплатформенная согласованность | Более согласованна на разных ОС (Windows, macOS, Linux) благодаря управлению всеми зависимостями | Зависит от системных библиотек, которые могут отличаться на разных ОС |
Источники пакетов | Использует репозитории Conda (предварительно скомпилированные бинарные файлы, научный стек) | Использует PyPI (pip) для Python пакетов |
Воспроизводимость | Выше для сложных, научных или мультиязыковых проектов; может экспортировать полную среду (conda env export ) |
Хороша для чисто-Python проектов; может не обеспечивать воспроизводимость, если есть системные зависимости |
Не-Python зависимости | Может устанавливать и управлять (например, OpenBLAS, libpng) | Не может управлять; должны устанавливаться отдельно |
Экспорт/импорт сред | conda env export / conda env create для полной воспроизводимости |
pip freeze > requirements.txt / pip install -r requirements.txt (только Python пакеты) |
Производительность | Быстрее и надежнее для больших научных пакетов (например, numpy, pandas) | Может требовать компиляции из исходников, особенно на Windows |
Сложность | Немного выше настройка и управление | Легковесные, проще для базовых Python проектов |
Краткое резюме ключевых моментов
-
Conda среды идеальны для воспроизводимости в проектах, требующих как Python, так и не-Python зависимостей, или когда точная репликация на разных платформах критична. Conda управляет всей системой — включая Python, библиотеки и даже компиляторы — что облегчает обмен и воспроизведение сложных сред, особенно в области данных и исследований.
-
Python виртуальные среды (
venv
/virtualenv
) легковесны и отлично подходят для изоляции Python зависимостей в чисто-Python проектах. Однако они не управляют системными или не-Python зависимостями, поэтому воспроизводимость может быть нарушена, если ваш проект зависит от внешних библиотек или специфических системных настроек. -
Экспорт и обмен средами: Conda позволяет экспортировать полное описание среды (
conda env export
), включая все зависимости и их версии, которое может быть точно воссоздано в другом месте. С виртуальными средамиpip freeze
захватывает только Python пакеты, но не системные зависимости или версию интерпретатора Python. -
Заключение Используйте Conda для максимальной воспроизводимости в научных, кроссплатформенных или сложных проектах. Используйте Python виртуальные среды для легковесных, чисто-Python проектов, где системные зависимости не являются проблемой.