PEX Python-приложения в одном файле — мечта или реальность?

12 Jul, 2026
4,217
🔱 312
👥 51

Представьте: вам нужно передать коллеге 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 создает самораспаковывающийся архив, который:

  1. Содержит все зависимости
  2. Имеет механизм запуска
  3. Поддерживает кэширование для ускорения повторных запусков

Практические кейсы

  1. Разработка

    • Быстрое тестирование скриптов с разными версиями зависимостей
    • Обмен экспериментальными окружениями между разработчиками
  2. Развертывание

    • Простое распространение внутренних утилит
    • Создание воспроизводимых окружений для production
  3. Анализ данных

    • Упаковка Jupyter-ноутбуков с зависимостями
    • Запуск скриптов на удаленных машинах без возни с pip

Плюсы и минусы

✅ Преимущества:

  • Простота распространения приложений
  • Изоляция зависимостей
  • Кросс-платформенность

❌ Ограничения:

  • Размер файла (все зависимости внутри)
  • Нет поддержки Windows (только Linux/macOS)

Стоит ли пробовать?

Если вы:

  • Устали от "у меня это работает, а у тебя нет"
  • Хотите упростить процесс развертывания
  • Часто экспериментируете с разными версиями пакетов

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

Как начать?

Установка — одна команда:

pip install pex

Документация и примеры: https://docs.pex-tool.org

P.S. Кстати, знаете ли вы, что PEX используется в таких проектах как Pants и Buck? Это говорит о его надежности и зрелости.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.