Как изолировать зависимости для нескольких Python-проектов на одном компьютере?

Ответ

Для изоляции зависимостей и избежания конфликтов версий пакетов между проектами в Python используются виртуальные окружения.

Стандартным инструментом для этого является модуль venv.

Основной процесс работы с venv:

  1. Создание окружения В директории проекта выполните команду, где venv — это стандартное имя для папки окружения:

    # Linux/macOS
    python3 -m venv venv
    
    # Windows
    py -m venv venv
  2. Активация окружения После активации pip будет устанавливать пакеты в папку venv, а не глобально.

    # Linux/macOS
    source venv/bin/activate
    
    # Windows (Command Prompt)
    .venvScriptsactivate.bat
    
    # Windows (PowerShell)
    .venvScriptsActivate.ps1
  3. Установка зависимостей Устанавливайте пакеты, как обычно. Они будут привязаны только к этому проекту.

    pip install requests numpy
    pip freeze > requirements.txt
  4. Деактивация Для выхода из виртуального окружения используйте команду:

    deactivate

Инструменты для продвинутого управления:

  • Poetry или Pipenv: автоматизируют создание окружений и управление зависимостями через файлы pyproject.toml или Pipfile, что является более современной практикой.
  • pyenv: позволяет управлять несколькими версиями самого Python на одной машине.

Ответ 18+ 🔞

Так, слушай, история про виртуальные окружения в питоне — это вообще пиздец какой-то жизненно важный скилл, если не хочешь потом орать "почему у меня всё сломалось, блядь?".

Представь: у тебя два проекта. В одном нужен numpy версии 1.20, а в другом — 1.25, потому что там какой-то новый, ебаный, функционал. Если ты всё ставишь глобально в систему — это гарантированный пиздец и конфликт версий. Один проект начнёт падать с ошибками, которые даже читать страшно. Чтобы этого не было, нужны виртуальные окружения. Это как отдельные, изолированные комнаты для каждого проекта, где у него свои игрушки и он никому не мешает.

Стандартный и самый простой способ — модуль venv. Делается всё просто, хоть и через консоль.

Как этим пользоваться, не сломав себе всё:

  1. Создаём эту самую комнату-окружение. Заходишь в папку своего проекта и пишешь магическую команду. venv в конце — это просто имя папки, где всё будет лежать. Можешь назвать её .venv или my_super_env, но все обычно называют venv, чтобы не ебать мозг.

    # На Линуксе или Маке
    python3 -m venv venv
    
    # На Винде (если у тебя несколько питонов)
    py -m venv venv

    Создалась папочка venv — вот твоё изолированное пространство, пока неактивное.

  2. Активация, или "заходим в комнату". Теперь нужно в этом окружении начать работать. Для этого его надо активировать. Команды для разных систем разные, запомнить несложно.

    # Linux/macOS
    source venv/bin/activate
    # После этого в начале строки терминала появится (venv) — значит, ты внутри.
    
    # Windows (Command Prompt — старый добрый cmd)
    .venvScriptsactivate.bat
    
    # Windows (PowerShell — эта более новая штука)
    .venvScriptsActivate.ps1

    Всё! Теперь если будешь ставить пакеты через pip, они полетят не в систему, а в эту папку venv. Магия, блядь!

  3. Работаем в уютной изоляции. Ставим что душе угодно, конфликтов с глобальными пакетами не будет.

    pip install requests pandas numpy

    А чтобы потом, например, на другом компе или коллеге легко всё повторить, сохраняем список установленного в файл:

    pip freeze > requirements.txt

    Файл requirements.txt — это святое. Его в репозиторий. Потом другой человек склонирует проект, создаст своё venv и сделает pip install -r requirements.txt. И у него будет точь-в-точь такой же зоопарк пакетов.

  4. Выходим из комнаты. Закончил работать с проектом — просто выполни:

    deactivate

    Приставка (venv) исчезнет, и ты снова в глобальной системе. Всё просто, как три копейки.

А если хочется больше магии и автоматизации?

venv — это основа, но есть и крутые надстройки:

  • Poetry или Pipenv: это уже не просто "комната", а целый "умный дом" для зависимостей. Они сами создают окружения, хитро разрешают версии пакетов и хранят всё в удобных файлах (pyproject.toml или Pipfile). Современно, модно, молодёжно.
  • pyenv: а это вообще другая история. Он нужен, если тебе нужно на одной машине иметь несколько разных версий самого Python. Скажем, на одном проекте 3.8, а на другом — 3.11. pyenv позволяет их переключать. А внутри каждой версии питона ты уже создаёшь свои venv для проектов. Мощь, блядь!

Короче, если не хочешь однажды проснуться в аду из ImportError и VersionConflict — приучайся к виртуальным окружениям с первого дня. Поначалу кажется, что лишние телодвижения, но потом спасибо себе скажешь.