PEX Python-приложения в одном файле — мечта или реальность?
Представьте: вам нужно передать коллеге Python-скрипт с кучей зависимостей. Вместо инструкции вида "установи вот эти 20 пакетов" вы просто отправляете один файл — и он работает. Это не фантастика, а реальность с PEX (Python EXecutable).
Что такое PEX и зачем он нужен?
PEX — это инструмент для создания переносимых Python-окружений в одном исполняемом файле. По сути, это усовершенствованная версия virtualenv, которая:
- Упаковывает все зависимости в один .pex файл
- Не требует предварительной установки Python-пакетов
- Работает на разных платформах (Linux, macOS)
- Поддерживает спецификацию PEP 441
Кому это пригодится?
- Разработчикам, которые хотят упростить развертывание своих приложений
- DevOps-инженерам для создания воспроизводимых окружений
- Аналитикам данных для обмена экспериментами с коллегами
Как это работает? 5 ключевых возможностей
1. Создание окружения с нужными пакетами
Хотите быстро получить интерпретатор с requests и flask? Одна команда:
pex requests flask -o my_env.pex
./my_env.pex # запускаем окружение
2. «Заморозка» текущего virtualenv
Можно экспортировать все пакеты из существующего окружения:
pex $(pip freeze) -o frozen_env.pex
3. Запуск скриптов в изолированном окружении
Запустите скрипт с временным окружением, не загрязняя систему:
pex flask -- webserver.py
4. Создание standalone-исполняемых файлов
Если пакет имеет entry points, можно создать автономный исполняемый файл:
pex "pex>=2.1.35" --console-script pex-tools -o pex-tools.pex
5. Поддержка разных интерпретаторов
Можно указать конкретную версию Python или даже PyPy:
pex "pex>=2.1.35" -c pex-tools --python=pypy -o pypy-pex.pex
Технические детали
PEX использует:
- ZIP-архивирование для упаковки зависимостей
- Механизм entry points для создания исполняемых файлов
- Совместим с популярными системами сборки (Pants, Buck, pygradle)
Архитектурно PEX создает самораспаковывающийся архив, который:
- Содержит все зависимости
- Имеет механизм запуска
- Поддерживает кэширование для ускорения повторных запусков
Практические кейсы
-
Разработка
- Быстрое тестирование скриптов с разными версиями зависимостей
- Обмен экспериментальными окружениями между разработчиками
-
Развертывание
- Простое распространение внутренних утилит
- Создание воспроизводимых окружений для production
-
Анализ данных
- Упаковка Jupyter-ноутбуков с зависимостями
- Запуск скриптов на удаленных машинах без возни с pip
Плюсы и минусы
✅ Преимущества:
- Простота распространения приложений
- Изоляция зависимостей
- Кросс-платформенность
❌ Ограничения:
- Размер файла (все зависимости внутри)
- Нет поддержки Windows (только Linux/macOS)
Стоит ли пробовать?
Если вы:
- Устали от "у меня это работает, а у тебя нет"
- Хотите упростить процесс развертывания
- Часто экспериментируете с разными версиями пакетов
...то PEX стоит добавить в ваш инструментарий. Это один из тех инструментов, которые сначала кажутся простыми, а потом становятся незаменимыми.
Как начать?
Установка — одна команда:
pip install pex
Документация и примеры: https://docs.pex-tool.org
P.S. Кстати, знаете ли вы, что PEX используется в таких проектах как Pants и Buck? Это говорит о его надежности и зрелости.