Python-эквивалент uber-jar

Я ищу эквивалент uber-jar в мире python.

  • Мне нужно распространить пакет Python на все три основные платформы (Windows, Mac, Linux).
  • Он должен быть связан со всеми его зависимостями, так как на целевой платформе может отсутствовать Интернет.
  • Это должен быть кроссплатформенный дистрибутив, поэтому мне не нужно собирать его для нескольких целей. То есть я должен иметь возможность запускать его на всех платформах следующим образом:

    python package.ext

Вы можете предположить, что пакет представляет собой чистый python (без собственного кода). Есть ли что-нибудь, что удовлетворяет этим требованиям?

Я знаю следующие варианты, каждый из которых имеет недостатки:

  • .whl пакеты требуют pip для установки.
  • Я не знаю, как создать .egg, содержащий все зависимости пакета.
  • Этот PEP: http://legacy.python.org/dev/peps/pep-0441 показывает, что python поддерживает запуск .zip файлов, но AFAICT, лучшим инструментом для создания такого zip является pex (https://github.com/pantsbuild/pex), который, я думаю, не поддерживает Windows

person Michael Gummelt    schedule 22.06.2016    source источник
comment
Я думаю, что короткий ответ нет. Немного более длинный ответ без ответа: найти это для вас не по теме для SO.   -  person jonrsharpe    schedule 22.06.2016
comment
pex явно не поддерживает Windows, и, похоже, с 2016 года на этом фронте ничего не происходило. /pantsbuild/pex/issues/230   -  person clacke    schedule 07.07.2019


Ответы (1)


Одной из альтернатив uber-jar для Java (созданной, скажем, с помощью шейд-плагина) на языке Python может быть простое создание tar-архива всего виртуального окружения и использование его в процессе развертывания.

Проблема с этим подходом (как и с JAR!) заключается в том, что одному из пакетов нужны собственные библиотеки. Но это другая история, я бы сказал...

Другая (современная) альтернатива — просто создать образ Docker.

person DejanLekic    schedule 21.10.2016
comment
Для этого можно использовать pypi.org/project/pyzzer. Не так аккуратно, как pex, который извлекает зависимости, добавляет свою прелюдию, которую можно распаковать во временный каталог, и т. д. Но это только начало, и, в отличие от pex, pyzzer поддерживает Windows. - person clacke; 07.07.2019