Шпаргалка по Python venv
некоторые полезные команды venv
Venv — это инструмент командной строки для управления виртуальными средами. Простой вариант по сравнению с Anaconda. Вот некоторые полезные команды venv.
Cheat-лист Venv Python
Создание виртуальной среды
-
Стандартная команда (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 <env path>
Частые ошибки при управлении виртуальными средами Python
Забывание активировать виртуальную среду
- Частой ошибкой является выполнение команд без активации нужной виртуальной среды, что приводит к установке пакетов в глобальную среду или неправильную venv. Это может вызвать конфликты зависимостей и непредсказуемое поведение.
Нефиксируя версии пакетов
- Использование расплывчатых спецификаторов версий (например,
>=
вместо==
) вrequirements.txt
подрывает воспроизводимость. Точное фиксирование версий гарантирует, что все, кто работает над проектом, используют одни и те же версии пакетов, предотвращая непредвиденные проблемы при развертывании или совместной работе.
Смешение глобальных и виртуальных сред
- Непреднамеренная установка пакетов глобально или смешение глобальных и виртуальных сред может вызвать конфликты, особенно если разные проекты требуют несовместимых версий пакетов. Всегда убедитесь, что вы работаете в правильной среде.
Коммит виртуальных сред в контроль версий
- Включение директории виртуальной среды (например,
venv/
) в контроль версий увеличивает размер репозиториев и является ненужным. Всегда добавляйте директории venv в.gitignore
, чтобы сохранить чистоту репозитория.
Игнорирование разделения разработки и производства
- Неотличимость зависимостей разработки и производства может привести к перегруженным или небезопасным развертываниям. Используйте отдельные файлы требований или разделы конфигурации для каждого.
Недостаток документации и автоматизации
- Отсутствие документации по настройке среды или неудача автоматизации процесса (с помощью скриптов или Makefile) затрудняет привлечение новых участников и воспроизведение сред.
Неудаление старых сред
- Со временем ненужные виртуальные среды могут накапливаться, занимая место на диске и вызывая путаницу. Регулярно удаляйте устаревшие venv, чтобы поддерживать чистую рабочую область.
Игнорирование границ системного Python и менеджера пакетов
- Изменение системного Python или смешение системных менеджеров пакетов с pip может нарушить системные инструменты и вызвать трудно диагностируемые проблемы. Всегда используйте venv для зависимостей проекта и избегайте вмешательства в системные пакеты.
Таблица обобщения
Ошибка | Последствия |
---|---|
Забывание активировать venv | Установка пакетов в неправильной среде |
Нефиксируя версии пакетов | Непредсказуемые сборки, трудно воспроизводимые ошибки |
Смешение глобальных и виртуальных сред | Конфликты зависимостей/версий |
Коммит venv директорий в контроль версий | Перегруженные, запутанные репозитории |
Неотличимость разработки и производства | Перегруженные/небезопасные среды производства |
Недостаток документации/автоматизации | Трудное привлечение, несогласованные настройки |
Неудаление старых сред | Загромождение диска, путаница |
Изменение системного Python или пакетов | Нестабильность системы, сломанные инструменты |
Соблюдение лучших практик, таких как всегда активация venv, фиксирование зависимостей, разделение сред и поддержание чёткой документации, поможет избежать этих распространённых ошибок.
Основные различия между Conda и виртуальными средами для воспроизводимости
Функция | Conda Environments | Python Virtual Environments (venv/virtualenv) |
---|---|---|
Область управления | Управляет пакетами Python и непакетными зависимостями (например, системные библиотеки, компиляторы) | Управляет только пакетами Python через pip |
Управление версиями Python | Может указать и установить любую версию Python в среде | Использует установленную системную версию Python |
Платформенная согласованность | Более согласованы на разных ОС (Windows, macOS, Linux) из-за управления всеми зависимостями | Зависит от системных библиотек, которые могут отличаться по ОС |
Источники пакетов | Использует репозитории Conda (предкомпилированные бинарники, научный стек) | Использует PyPI (pip) для пакетов Python |
Воспроизводимость | Высокая для сложных, научных или мультиязычных проектов; можно экспортировать полную среду (conda env export ) |
Хорошая для чисто-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, так и непакетных зависимостей, или когда точное воспроизведение на разных платформах критично. Conda управляет всем стеком — включая сам Python, библиотеки и даже компиляторы — что делает более простым обмен и воспроизведение сложных сред, особенно в контексте науки о данных и исследований.
-
Виртуальные среды Python (
venv
/virtualenv
) легковесны и отлично подходят для изоляции зависимостей Python в чисто-Python проектах. Однако они не управляют системными или непакетными зависимостями, поэтому воспроизводимость может быть нарушена, если проект зависит от внешних библиотек или конкретных настроек системы. -
Экспорт и обмен средами: Conda позволяет экспортировать полное описание среды (
conda env export
), включая все зависимости и их версии, которые можно точно воссоздать в другом месте. С виртуальными средамиpip freeze
записывает только пакеты Python, а не системные зависимости или версию интерпретатора Python. -
Вывод
Используйте Conda для максимальной воспроизводимости в научных, межплатформенных или сложных проектах. Используйте виртуальные среды Python для легковесных проектов на чистом Python, где системные зависимости не являются проблемой.