We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Создание полностью изолированных виртуальных окружений Python в Termux через pyenv, venv и Poetry

Пошаговое руководство по созданию изолированных окружений Python в Termux: pyenv для версий, venv для простых проектов и Poetry для управляемых зависимостей — с проверкой изоляции и практическими командами.

Termux — мощная среда для разработки на Android, но без дисциплины легко получить «свалку» зависимостей: где-то старая версия Python, где-то другой набор пакетов, а в итоге проект неожиданно перестаёт запускаться. Решение — создавать полностью изолированные виртуальные окружения под каждую задачу/проект.

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

  • pyenv — управление версиями Python;
  • venv — быстрые изолированные окружения для конкретного проекта;
  • Poetry — изоляция зависимостей и воспроизводимость окружений.

Фокус — на практической изоляции: чтобы разные проекты не мешали друг другу, а вы могли уверенно выбирать версию Python и состав зависимостей.

Подготовка Termux: обновление и базовые пакеты

Начнём с подготовки инструментов сборки и системных библиотек, которые часто нужны Python-проектам (включая сборку некоторых зависимостей).

pkg update -y
pkg upgrade -y
pkg install -y git curl wget build-essential clang pkg-config libffi openssl zlib

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

Установка pyenv в Termux

pyenv позволяет ставить и использовать разные версии Python, не смешивая их между проектами. Важно: pyenv сам по себе не «заменяет» ваш проект, он создаёт контекст выбранной версии Python, а уже дальше вы используете venv/Poetry для изоляции зависимостей.

Установка pyenv (как правило, через репозиторий):

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Далее добавим инициализацию pyenv в ~/.bashrc (или в ~/.zshrc, если вы используете zsh). В Termux чаще всего это ~/.bashrc.

printf '
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
' >> ~/.bashrc

Перезагрузим оболочку:

source ~/.bashrc

Установка нужной версии Python через pyenv

Теперь выберем конкретную версию Python для проекта. Для примера возьмём Python 3.11 (вы можете выбрать любую поддерживаемую версию, которая вам нужна).

Сначала можно посмотреть доступные варианты:

pyenv install --list | grep -E '^ 3\.(10|11|12)\.' | tail -n 20

Установим выбранную версию:

pyenv install 3.11.9

Проверим, что pyenv видит версию:

pyenv versions

Выбор версии Python под проект (pyenv local)

Ключ к «полностью изолированным окружениям» — фиксировать версию Python для каждого проекта отдельно. Это делается через pyenv local, который создаёт файл .python-version в каталоге проекта.

mkdir -p ~/projects/demo-venv
cd ~/projects/demo-venv
pyenv local 3.11.9

Проверим:

cat .python-version
python --version

Теперь все последующие команды для этого каталога (в рамках оболочки) будут опираться на Python 3.11.9, выбранный pyenv.

Изоляция зависимостей через venv

Когда версия Python зафиксирована, создаём виртуальное окружение venv. Оно изолирует пакеты, чтобы зависимости этого проекта не попадали в другие проекты.

Шаги: создание venv и проверка изоляции

В корне проекта создадим окружение:

python -m venv .venv

Активируем окружение:

source .venv/bin/activate

Убедимся, что Python «внутри» окружения:

which python
python -c "import sys; print(sys.executable)"

Установим тестовые зависимости (пример):

python -m pip install --upgrade pip
python -m pip install requests

Зафиксируем, что requests установился именно в этом окружении:

python -c "import requests; import pkgutil; print('requests:', requests.version)"

Выход и повторная проверка (изоляция сохраняется)

Выключим окружение:

deactivate

Проверим, что теперь python снова указывает на версию, управляемую pyenv, а не на установленный набор пакетов venv:

which python
python -c "import sys; print(sys.executable)"

Если после deactivate попробовать импортировать пакет, установленный только в venv, он может не находиться — и это нормально. Изоляция работает.

Когда venv достаточно, а когда нужен Poetry

  • venv — отличный выбор для простых проектов, когда вы сами вручную управляете requirements.txt или запускаете небольшую утилиту.
  • Poetry — удобнее для проектов с развитыми зависимостями: он ведёт pyproject.toml, позволяет фиксировать версии и упрощает воспроизводимость.

Установка Poetry в Termux

Poetry можно устанавливать на уровне пользовательской оболочки. Важно: даже если Poetry ставится «глобально», окружение проекта остаётся изолированным в рамках выбранной версии Python и механизма Poetry.

Один из распространённых способов установки:

curl -sSL https://install.python-poetry.org | python3 -

Убедитесь, что доступны команды Poetry (при необходимости добавьте путь к ~/.local/bin в PATH):

export PATH="$HOME/.local/bin:$PATH"
poetry --version

Poetry: создание проекта с фиксированной версией Python

Создадим отдельный проект, зафиксируем версию Python через pyenv, затем инициализируем Poetry.

mkdir -p ~/projects/demo-poetry
cd ~/projects/demo-poetry
pyenv local 3.11.9

Дальше инициализация Poetry:

poetry init --name demo-poetry --dependency requests@^2.32.0 -n

Теперь зададим, чтобы Poetry использовал текущую версию Python, управляемую pyenv. Для этого обычно достаточно настроить интерпретатор и/или указать его при установке.

Проверим, какой Python видит оболочка:

which python
python --version

Установим зависимости в изолированное окружение Poetry:

poetry install

Проверка, что Poetry реально использует изоляцию

Проверим путь к окружению, которое создал Poetry:

poetry env info

Запустим Python через Poetry, чтобы он гарантированно работал в окружении проекта:

poetry run python -c "import sys; print(sys.executable)"
poetry run python -c "import requests; print('requests:', requests.version)"

Теперь вы можете быть уверены: зависимости не будут смешиваться между проектами, потому что каждое окружение закреплено за конкретной папкой проекта.

Обновления и управление зависимостями в Poetry

Обновить зависимости с сохранением принципов Poetry можно, например так:

poetry update

Если вы добавляете новый пакет, Poetry сам обновит pyproject.toml и установит зависимость в окружение:

poetry add httpx@^0.27.0

Практические сценарии: два проекта — разные окружения, разные версии

Рассмотрим проверку изоляции на уровне «чтобы друг другу не мешали». Создадим ещё один проект и выберем другую версию Python.

mkdir -p ~/projects/demo-venv-2
cd ~/projects/demo-venv-2
pyenv local 3.10.14
python -m venv .venv
source .venv/bin/activate
python --version
python -c "import sys; print(sys.executable)"

Если теперь в demo-venv вы активируете другое окружение, вы увидите, что используете другой Python-исполняемый файл и другой набор библиотек. Это и есть «полная изоляция» в практическом смысле.

Частые проблемы и как их избежать

1) «Пакеты не находятся» после активации/деактивации
Почти всегда причина — вы не в том окружении. Проверяйте which python и sys.executable.

2) «Poetry создал окружение не там, где ожидается»
Смотрите вывод poetry env info. Также убедитесь, что в папке проекта задан корректный pyenv local.

3) Конфликты из-за PATH
Если после установки Poetry команда не находится, добавьте в PATH ~/.local/bin (и перезапустите оболочку).

Как запускать проекты надёжно

Рекомендуемый подход:

  • в каждом проекте: pyenv local <version>;
  • для venv: source .venv/bin/activate перед запуском;
  • для Poetry: запуск через poetry run <команда> и poetry install после изменений.

Так вы минимизируете риск случайно запустить код с «не тем» Python.

Заключение

Мы собрали производственный подход к изоляции Python в Termux:

  • pyenv фиксирует версию Python на уровне проекта;
  • venv изолирует зависимости простых проектов;
  • Poetry обеспечивает управляемые зависимости и воспроизводимость в формате pyproject.toml.

Если вы хотите, чтобы среда Termux была не только «рабочей», но и стабильной под долгую разработку, команда РыбинскЛАБ поможет настроить окружения, воспроизводимые зависимости и удобные сценарии запуска под ваш сценарий работы.

Услуги РыбинскЛАБ: консультации и настройка Termux/CI-процессов, аудит окружений Python, помощь с pyenv/venv/Poetry, а также обучение команды разработчиков практикам изоляции зависимостей.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект