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