Управление версиями Python на Linux и в проектах
Оглавление
- Как установить другую версию Python
- Управление проектами с помощью виртуальных окружений
- Создание окружения с venv
- Создание окружения с virtualenv
- Создание окружения с Miniconda/Anaconda
- Запуск скрипта Python3 командой “python”
- Альтернативные подходы и когда они уместны
- Сравнение инструментов и рекомендации
- Часто задаваемые вопросы
Введение
Язык программирования Python появился в 1991 году и с тех пор постоянно развивается: функции добавляются и удаляются, поведение может меняться. Из-за этого код, написанный для одной версии Python, может не работать в другой. Чтобы избежать проблем с совместимостью и не ломать системные зависимости операционной системы, важно уметь:
- устанавливать нужные версии Python рядом с системной;
- изолировать зависимости проектов;
- выбирать правильный инструмент под задачу (venv, virtualenv, Conda, pyenv, Docker).
В этой статье собраны практические инструкции, рекомендации и чеклисты по выбору и использованию инструментов управления версиями Python на Linux и в проектах.
Как установить другую версию Python
Самый простой путь — воспользоваться системным пакетным менеджером (apt для Ubuntu/Debian). На многих Linux-дистрибутивах Python уже установлен: чаще всего доступны python2 и python3. Проверьте их наличие так:
# Проверить python3
python3 --version
# Проверить python2
python2 --versionЕсли в вашей системе не хватает нужной версии, для Ubuntu-подобных дистрибутивов удобно использовать PPA deadsnakes, который содержит сборки нескольких версий Python.
- Установите утилиты для работы с PPA, если они не установлены:
sudo apt-get update
sudo apt-get install software-properties-common- Добавьте репозиторий deadsnakes:
sudo add-apt-repository ppa:deadsnakes/ppa- Установите нужную версию (замените 3.10 на требуемую версию):
sudo apt update
sudo apt install python3.10- Проверьте установку:
python3.10 --versionВажно: даже после установки новой версии системная команда python3 по умолчанию может по-прежнему ссылаться на ранее установленную версию.
Если вы хотите переключать версию, используйте механизм alternatives:
# Зарегистрировать версии в update-alternatives (пример)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
# Выбрать версию вручную
sudo update-alternatives --config pythonПримечание: изменение системного /usr/bin/python может повлиять на системные скрипты. На серверах и рабочих станциях лучше оставлять системный Python неизменным и использовать виртуальные окружения или инструменты управления версиями для проектов.

Управление проектами с помощью виртуальных окружений
Проблема: pip по умолчанию устанавливает пакеты глобально, и это может ломать системные зависимости. Решение — виртуальные окружения. Виртуальное окружение — это изолированная копия интерпретатора Python с собственными установленными пакетами. Оно позволяет фиксировать версии библиотек для проекта и не влияет на системный Python.
Краткое определение: виртуальное окружение — локальная изолированная среда Python с независимыми пакетами.
Преимущества использования виртуальных окружений:
- Изоляция зависимостей между проектами;
- Возможность использовать разные версии Python в разных проектах;
- Упрощённое развёртывание и воспроизводимость окружения.
Создание виртуального окружения с venv
venv — штатный модуль для создания виртуальных окружений, входит в стандартную библиотеку начиная с Python 3.3. Для использования venv убедитесь, что установлен пакет -venv для вашей версии Python:
sudo apt update
sudo apt install python3.10-venvСоздание и активация окружения:
# Создать окружение в каталоге venv
python3 -m venv venv
# Или создать окружение с именем mte
python3 -m venv mte
# Активировать окружение
source venv/bin/activate
# Установить пакет внутри окружения
python -m pip install requests
# Деактивировать окружение
deactivateAльтернативы: на Windows активация выглядит как venv\Scripts\activate.

Советы по venv:
- Храните файл зависимостей requirements.txt и используйте python -m pip install -r requirements.txt;
- Не добавляйте каталог окружения в систему контроля версий (добавьте в .gitignore);
- Для проектов используйте явное указание интерпретатора в CI/CD или shebang в скриптах.
Создание виртуального окружения с virtualenv
virtualenv — зрелый и гибкий инструмент для создания виртуальных окружений. Он может работать с разными версиями Python и предоставляет дополнительные возможности по сравнению с базовым venv.
Установка и базовое использование:
python3 -m pip install virtualenv
virtualenv venv
source venv/bin/activateСоздание окружения с конкретной версией интерпретатора:
virtualenv --python=/usr/bin/python2.6 venvПрименение: virtualenv удобно, если вы работаете с очень старыми проектами на Python2 или хотите более детально контролировать окружение.

Создание виртуального окружения с Miniconda/Anaconda
Conda — менеджер пакетов и окружений, который поддерживает не только Python, но и другие языки и бинарные зависимости. Anaconda включает много научных пакетов, Miniconda — минимальная установка с Conda.
Установка Miniconda:
- Скачайте скрипт установки Miniconda соответствующей архитектуры и версии Python.
- Запустите установщик в терминале:
./Miniconda3.sh После установки создаётся базовое окружение base. Пример команд:
# Активировать base
conda activate base
# Создать окружение с Python 3.7
conda create -n myenv python=3.7
conda activate myenv
# Установить пакет
conda install numpyПлюсы Conda:
- Управляет версиями бинарных зависимостей (BLAS, LAPACK и т.д.);
- Удобен для дата-сайенс задач и пакетов, которые тяжело собирать из исходников;
- Позволяет изолировать не только pip-пакеты, но и системные библиотеки.
Недостатки:
- Образ окружения может быть больше по размеру;
- Разница между pip и conda-пакетами может приводить к конфликтам — внимательно читайте документацию.

Запуск Python3 скрипта командой “python”
На некоторых системах удобнее вводить просто python вместо python3. В Ubuntu есть пакет python-is-python3, который сопоставляет python с python3-бинарником:
sudo apt update
sudo apt install python-is-python3Важно: такой пакeт меняет поведение команды python глобально — это может повлиять на системные скрипты или инструменты, ожидающие специфического варианта Python. Используйте осторожно, особенно на серверах.
Альтернативные подходы и инструменты
Помимо venv/virtualenv/conda существует набор инструментов для управления версиями и окружениями, которые полезны в разных сценариях:
- pyenv — переключение между несколькими локальными версиями Python; умеет устанавливать произвольные сборки Python в пользовательскую директорию.
- asdf — менеджер версий для нескольких языков (через плагины: python, nodejs, ruby и т.д.).
- Docker — контейнеры гарантируют, что среда полностью воспроизводима и изолирована на уровне ОС.
- Сборка Python из исходников — когда нужна специфическая конфигурация или патчи.
Краткий сценарий выбора:
- Если нужно просто изолировать зависимости проекта — venv или virtualenv.
- Для научных стеков и бинарных зависимостей — Conda.
- Для переключения версий интерпретатора на уровне пользователя — pyenv.
- Для полного контроля операционной системы и воспроизводимости — Docker.
Сравнение инструментов — таблица
| Инструмент | Что изолирует | Подходит для | Простота | Когда выбрать |
|---|---|---|---|---|
| venv | pip-пакеты, интерпретатор (локальная копия) | большинство приложений на Python3 | высокая | простые веб-приложения, CLI |
| virtualenv | как venv + дополнительные возможности | старые проекты, Python2 | высокая | проекты с разными версиями пакетов |
| Conda | пакеты + бинарные зависимости | Data Science, ML | средняя | окружения с нативными библиотеками |
| pyenv | версии интерпретатора | разработка, локальные машины | средняя | нужно много версий Python |
| Docker | вся ОС, все зависимости | продакшен, CI | низкая (сложнее) | контейнеризация и воспроизводимость |
Как выбрать версию Python для проекта — мини-методология
- Определите требования зависимостей (какие версии пакетов поддерживаются).
- Проверьте совместимость с целевыми средами (серверы, CI, PaaS).
- Выберите минимально необходимую версия Python с прицелом на безопасность и поддержку (LTS и поддерживаемые ветки).
- Задокументируйте выбор в README и в конфигурации окружения (requirements.txt / environment.yml / pyproject.toml).
- В CI явно укажите интерпретатор (например, setup-python в GitHub Actions или matrix в GitLab CI).
Ментальные модели и эвристики
- Правило «не трогать системный Python»: системный интерпретатор должен оставаться в исходном состоянии.
- Локальное правило «один проект — одно окружение»: каждое приложение имеет собственное окружение с зафиксированными версиями.
- Эвристика «новее ≠ лучше во всём»: для продакшена выбирайте версии с активной поддержкой безопасности.
Роли — чеклисты
Разработчик:
- Использовать виртуальное окружение (venv/virtualenv/conda).
- Задокументировать зависимости.
- Наличие тестов и CI, исполняемых в том же окружении.
Системный администратор / DevOps:
- Не менять системный python без причины.
- Использовать pyenv или контейнеры для разных приложений.
- Автоматизировать установку и обновления через конфигурационные менеджеры (Ansible, Puppet).
Дата-сайентист:
- Рассмотреть Conda для бинарных пакетов.
- Фиксировать версии numpy, scipy, pandas и т.д.
- Проверять совместимость между pip и conda-пакетами.
Когда управление версиями может подвести (примеры ошибок)
- Установка новой системной версии сломала системный скрипт, который ожидал старый API.
- Конфликты между pip и conda-пакетами в одном окружении.
- Неправильно настроенный CI использует системный Python, а не окружение проекта.
Практические сценарии и тесты приёмки
Критерии приёмки для окружения проекта:
- Скрипт установки зависимостей reproducible: команда установки должна возвращать одинаковый набор пакетов.
- Тестовый запуск приложения проходит локально и в CI.
- README описывает точную команду для активации окружения и запуска.
Тестовые кейсы:
- Создать окружение, установить зависимости, запустить тесты — ожидается успешный статус.
- Попытка установить конфликтующие пакеты должна дать понятную ошибку.
Безопасность и конфиденциальность
- Не храните секреты (ключи, пароли) в requirements, environment.yml или в репозитории.
- Обновляйте пакеты по расписанию, особенно патчи безопасности.
- В продакшне используйте тщательно протестированные образы или зафиксированные версии зависимостей.
Decision flowchart (простой выбор инструмента)
flowchart TD
A[Нужно установить/управлять Python] --> B{Цель}
B -->|Изоляция зависимостей проекта| C[venv / virtualenv]
B -->|Наука/ML с бинарными библиотеками| D[Conda]
B -->|Много версий интерпретатора| E[pyenv]
B -->|Воспроизводимая среда ОС| F[Docker]
C --> G[Используйте requirements.txt или pyproject.toml]
D --> H[Используйте environment.yml и conda-forge]Часто задаваемые вопросы
Может ли установка разных версий Python сломать систему?
Да, если системные утилиты зависят от определённой версии или поведения Python. Изменяйте системный интерпретатор осмотрительно и предпочтительнее использовать виртуальные окружения или контейнеры.
Где виртуальные окружения хранят пакеты?
Они хранятся в каталоге окружения (обычно скрытом каталоге проекта, например ./venv), где находятся локальные копии интерпретатора, pip и установленных пакетов.
Как удалить виртуальное окружение?
Удалите каталог самого окружения (например rm -rf venv). Это удалит все локальные пакеты и настройки окружения.
Когда стоит использовать pyenv?
Используйте pyenv, если вы часто переключаетесь между версиями Python для разработки или вам нужно тестировать проект на нескольких версиях интерпретатора.
Почему иногда pip устанавливает глобально, а не в окружении?
Возможно, вы не активировали окружение или используете системный pip. Всегда активируйте окружение и запускайте python -m pip, чтобы быть уверенным, что пакеты попадут в локальную среду.
Заключение
Управление версиями Python — необходимый навык для безопасного и предсказуемого развития проектов. Правильный подход обычно включает в себя одну или несколько из следующих практик:
- Не трогать системный Python без крайней необходимости;
- Использовать виртуальные окружения (venv/virtualenv) для приложений;
- Применять Conda для проектов с тяжёлыми бинарными зависимостями;
- pyenv/asdf — для переключения версий интерпретатора на рабочей машине;
- Docker — для полной воспроизводимости окружения.
Следуя этим рекомендациям, вы уменьшите количество конфликтов версий, упростите развёртывание и улучшите воспроизводимость разработки.
Image credit: Hitesh Choudhary via Unsplash. All screenshots by Hrishikesh Pathak.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента