Шпаргалка по Python venv

некоторые полезные команды venv

Содержимое страницы

Venv — это инструмент командной строки для управления виртуальными средами. Простой вариант по сравнению с Anaconda. Вот некоторые полезные команды venv.

Python пытается открыть деревянную коробку.

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
    
    Теперь в командной строке должен отображаться имя среды.

Деактивация виртуальной среды

  • На всех платформах:
    deactivate
    
    Это возвращает вас к системному Python.

Установка пакетов

  • С использованием 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, где системные зависимости не являются проблемой.

Полезные ссылки