The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск PyOxidizer для упаковки Python-проектов в самодостаточные исполняемые файлы

25.06.2019 12:52

Представлен первый выпуск утилиты PyOxidizer, позволяющей упаковать проект на языке Python в форму самодостаточного исполняемого файла, включающего интерпретатор Python и все необходимые для работы библиотеки и ресурсы. Подобные файлы могут выполняться в окружениях без установленного инструментария Python или независимо от наличия необходимой версии Python. PyOxidizer также может формировать статически связанные исполняемые файлы, которые не привязаны и к системным библиотекам. Код проекта написан на языке Rust и распространяется под лицензией MPL (Mozilla Public License) 2.0.

Проект основан на одноимённом модуле для языка Rust, позволяющем встраивать Python-интерпретатор в программы на Rust для выполнения в них Python-скриптов. PyOxidizer теперь вышел за рамки дополнения для Rust и позиционируется как доступный для более широкой аудитории инструмент для формирования и распространения самодостаточных пакетов с Python. Для тех кому не нужно распространять приложения в виде исполняемого файла, PyOxidizer предоставляет возможности по генерации библиотек, пригодных для связывания с любыми приложениями для встраивания в них интерпретатора Python и необходимого набора расширений.

Для конечных пользователей поставка проекта в виде одного исполняемого файла существенно упрощает установку и избавляет от работы по подбору зависимостей, что актуально, например, для сложных проектов на Python, таких как видеоредакторы. Для разработчиков приложений PyOxidizer позволяет сэкономить время на организацию доставки приложения, без необходимости использования разных инструментов для формирования пакетов для разных операционных систем.

Применение предложенных сборок также положительно сказывается на производительности - сгенерированные в PyOxidizer файлы запускаются быстрее, чем при использовании системного Python за счёт исключения импорта и определения базовых модулей. В PyOxidizer модули импортируются из памяти - все встроенные модули сразу загружаются в память и затем используются без обращения к диску). В тестах время запуска приложения при использовании PyOxidizer сокращается примерно в два раза.

Из уже существующих похожих проектов можно отметить: PyInstaller (распаковывает файл во временный каталог и импортирует модули из него), py2exe (привязан к платформе Windows и требует распространения нескольких файлов), py2app (привязан к macOS), cx-freeze (требует отдельной упаковки зависимостей), Shiv и PEX (формируют пакет в формате zip и требует наличия Python в системе), Nuitka (компилирует код, а не встраивает интерпретатор), pynsist (привязан к Windows), PyRun (проприетарная разработка без пояснения принципов работы).

На текущем этапе развития в PyOxidizer уже реализована основная функциональность по генерации исполняемых файлов для Windows, macOS и Linux. Из пока недоступных возможностей отмечается отсутствие типового сборочного окружения, невозможность генерации пакетов в форматах MSI, DMG и deb/rpm, проблемы с упаковкой проектов, включающих сложные расширения на языке Си, отсутствие команд для сопровождения доставки ("pyoxidizer add", "pyoxidizer analyze" и "pyoxidizer upgrade"), ограниченная поддержка Terminfo и Readline, отсутствие поддержки выпусков отличных от Python 3.7, отсутствие поддержки сжатия ресурсов, невозможность кросс-компиляции.

  1. Главная ссылка к новости (https://gregoryszorc.com/blog/...)
  2. OpenNews: Python OS Project - новая операционная система на языке Python
  3. OpenNews: Выпуск Pyston 0.6, реализации языка Python с JIT-компилятором
  4. OpenNews: Выпуск Cython 0.27, компилятора для языка Python
  5. OpenNews: Выпуск Nuitka 0.6.0, компилятора для языка Python
Лицензия: CC-BY
Тип: Программы
Ключевые слова: python, pyoxidizer, packet
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (57) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:12, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Звучит неплохо, а как там с библиотеками? Можно напихать в бинарник matplotlib и pyside, pygobject или wxpython? Именно с тяжелыми, зависимыми от кода на C/C++ библиотеками в основном проблемы у всяких упаковщиков и компиляторов питона.
     
     
  • 2.8, анонимище (?), 14:01, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё интересно как программы на QT будут упаковываться
     
     
  • 3.38, Зелень (?), 19:59, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    QT написан на Objective C вообще-то.
     
     
  • 4.40, Аноним (40), 23:04, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    шта?
     
  • 4.42, анон (?), 00:29, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    как же вы достали, борцуны за правильный регистр одной буквы. контекст, слышал такое слово? из контекста понятно, о каком кутэ идет речь
     
     
  • 5.47, Зелень (?), 08:22, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это вообще-то баян такой древний. Да и тот, кто действительно работает с Qt, навряд ли будет писать QT.
     
  • 5.58, Ordu (ok), 15:05, 28/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ему надо показать свою эрудированность. Не мешай.
     
  • 3.39, Аноним (39), 20:00, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Как-то так https://download.qt.io/official_releases/qt-installer-framework/3.1.1/
     
  • 3.48, Аноним (48), 09:08, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Qt Installer Framework есть кроссплатформенный. В том смысле, что скрипт тот же самый - это удобно. Если платформенное приложение пишете, то имеет смысл платформенные же инсталляторы и использовать: есть удобные для Windows, macOS, для Linux посложнее. Библиотеки Qt можно полностью поставить на компьютер пользователя, а можно только необходимые. В последнем случае запускаете свое приложение на "чистом" компьютере и смотрите, каких библиотек не хватает. Их в дистрибутив и копируете. Количество и состав данных библиотек зависит от приложения, компилятора (что-то может потребоваться и из системы разработки приложений), платформы и версии Qt.
     
  • 2.12, Анончик999999 (?), 14:18, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    А еще интересно, если туда засунуть Numpy + Matplotlib + SymPy. Не будет ли в итоге больше гигабайта все весить. Наверно, если даже удастся скомпилирывать, то будет, так как пока не умеет сжатие ресурсов. Но прокт интересный, было б не плохо конкурирывать с PyInstaller, cxFreeze.
     
     
  • 3.15, GG (ok), 14:36, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    Ты болен что ли?
    Там больше сотни мегабайт весить нечему.
     
     
  • 4.23, Анончик999999 (?), 15:06, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Numpy тянет MKL. Он много весит. Собери, посмотри, а потом хами.
     
  • 3.21, Amphyby (ok), 15:05, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    накопи уже на Вольфрам Математику в конце то концов
     
     
  • 4.25, Аноним (25), 15:35, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А там можно компилировать. Мне просто надо компилировать ;)
     
  • 3.35, Аноним (-), 18:13, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Не проще на Julia перейти?
     
     
  • 4.43, Анончик999999 (?), 00:51, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    нет, потому что используется еще куча других пакетов.
     
     
  • 5.44, Led (ok), 00:59, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > используется еще куча других пакетов.

    Прекращай нюхать клей - на тебя пакетов не напасёшся.

     
  • 5.50, Аноним (-), 11:00, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Перепишите критические вычисления на Julia. Остальной код освободите от питона позже. На Julia можно подключать питон-код для связывания со старыми приложениями. + для Julia есть свой упаковщик.
     

  • 1.2, Игорь (??), 13:12, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Надеюсь антивирусы не так убивают скорость запуска с PyOxidizer как это происходит с PyInstaller. Там вообще жесть.
     
     
  • 2.13, Анончик999999 (?), 14:21, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А как интивирусы убивают скорость запуска с PyInstaller? Программы на Python вообще долго запускаются. А, если еще все тяжёлое сожмешь UPX, так вообще около минуты загружается с полтора раза болшим размером оперативы в Windows.
     
     
  • 3.28, Аноним (28), 16:03, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А как интивирусы убивают скорость запуска с PyInstaller?

    Учитывая, что PyInstaller суть самораспаковывающийся архив, видимо, они при распаковке, которая происходит при каждом запуске, сканируют каждый файл. Убогая архитектура закономерно порождает убогие проблемы.

     
  • 2.54, Wilem (?), 14:21, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Не надо пользоваться антивирусами — это лапша на уши домохозяйкам. Бывает конечно на работе заставляют, но обычно можно попросить исключить некоторые директории из скана.
     

  • 1.3, анон (?), 13:12, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Самое то, чтобы ждать зоопарк пакетов по дуалапу, вместо апгета и одного пакета.
     
  • 1.4, Аноним (4), 13:38, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Контейнеры в винду скоро завезут и будет вам софт гигабайтный. Блокноты на гугле хроме)
     
     
  • 2.9, анонимище (?), 14:05, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Такие уже есть, VSCode
     
     
  • 3.36, Аноним (36), 18:25, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    vscodium*
    Total disk usage: 266.4 MiB
     
  • 2.55, Wilem (?), 14:22, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Контейнеры в винде есть с WS2016 / Windows 10.
     

  • 1.5, Аноним (5), 13:44, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > Код проекта написан на языке Rust
    > Проект основан на одноимённом модуле для языка Rust, позволяющем встраивать Python-интерпретатор в программы на Rust для выполнения в них Python-скриптов

    Какое тонкое глумление над Питоном!

     
  • 1.6, iPony129412 (?), 13:59, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ещё в SNAP прикольно пайтон присовывать
     
  • 1.7, Аноним (7), 14:01, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Nuitka для этих целей поинтересней будет. Она преобразует весь питоний код в C/C++ и компилит бинарник.

    Кстати, названо в честь жены разработчика Анны (Anna -> Annuitka -> Nuitka). Соответственно, читается «Нютка».

     
     
  • 2.14, Анончик999999 (?), 14:30, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А как на счёт тяжелых приложений, да и с Matplotlib, Numpy, SymPy, OpenCV и т.д.? Все компирилует без проблем с C-расширениями?
     
     
  • 3.22, Аноним (7), 15:06, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если тяжёлое приложение написано без особых изощрений, то «Нютке» в общем пофиг. Что сто строчек в си перегнать, что сто тысяч.

    NumPy точно поддерживается. Остальное надо смотреть индивидуально. Разработчик очень активен, если какая-то экзотика не заработает, он может достаточно оперативно починить.

     
  • 2.17, Аноним (17), 14:55, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Анютка = Aniutka
     
     
  • 3.24, Аноним (7), 15:10, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    «Anna -> Annuitka -> Nuitka» — это из презентации самого разработчика с PyCon. Он немец. Видимо, какие-то особенности немецкого написания.
     
  • 2.30, Аноним (30), 16:29, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Когда смотрел падала твоя Нуитка с PySide ом докрутить конечно можно, но уж больно геморно под конкретный компилятор код подгонять. Тогда уже cython если нужна скорость.
     

  • 1.10, VINRARUS (ok), 14:11, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А есть тоже самое для shell?
     
     
  • 2.16, PnDx (ok), 14:55, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Молодость. FIDOnet. 90-е. Вопрос "а есть ли компилятор для bash"…
    А вот таки есть что-то https://www.google.com/search?q=bash+compiler

    * Т.к. bash является надмножеством shell (чуть-чуть не, но не будем придираться), ответ — по теме.
    Это disclaimer для выступлений "я не такой, у меня *sh". Всё-таки bash сейчас mainstream, его даже в openindiana притащили "из коробки" вместо ksh.

     
     
  • 3.32, VINRARUS (ok), 16:59, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вообще сам интерпритатор bash это сильно заторможеный sh. ;-)
    Dash же пошол путём ускорения и оптимизаций, по этому я выбрал этот интерпритатор для своих shell скриптов, а bash оставил для врагов. :D
     

  • 1.11, Грусть (?), 14:13, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Nix уже есть. Подходит не только для питона.
     
     
  • 2.27, Аноним (25), 15:36, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потоки там работают так же а чего с памятью гарбидж коллектор там какой?
     

  • 1.19, via (??), 14:59, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >>> Для конечных пользователей поставка проекта в виде одного исполняемого файла

    Смотря какого размера. Если как у Бульдозера - ок/ больше, лучше уж в snap пихать

     
  • 1.20, Аноним (-), 15:02, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А давайте, как гетеросексуальные белые мужчины, просто напишем компилятор Python --> .exe/.c/.asm/go/.deb/snap!
     
     
  • 2.26, Аноним (25), 15:36, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не тупи уже написали такой компилятор - Golang.
     

  • 1.29, Аноним (30), 16:24, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Pyinstaller самый лучший из того что предлагают альтернативы уже давно им пользуюсь. И антивири на него давно уже не ругаются. А Nuitka глюки с сег фолотом глючит c Pyside не понимает конструкции clicked.connect() просит полную версию QObject.connect и слоты с указанием типов передаваемых данных.
     
  • 1.31, Mail (?), 16:34, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вот так раст всех и заборет.
     
  • 1.33, fsb4000 (?), 17:34, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    в чём смысл? в большинство linux дистрибутивов входит python, во всяких freebsd, openindiana тоже.

    Python рантайм очень маленький, на Windows python занимает ~75 мегабайт, та же java 12, 386 мегабайт. Но зато каждый скрипт будет занимать килобайты.

    Всегда проще попросить пользователя установить рантайм, чем заниматься такой чушью, нерациональное использование дискового пространства

     
     
  • 2.41, Аноним (-), 23:12, 25/06/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > в большинство linux дистрибутивов входит python

    почти наверняка несовместимый с тем скриптом, который пользователь захочет запустить.....

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

     
  • 2.56, Annoynymous (ok), 17:47, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Всегда проще попросить пользователя установить рантайм, чем заниматься такой чушью, нерациональное использование дискового пространства

    Ну да. Линуксоиды не понимают, что на самом деле наоборот.

     

  • 1.34, anonymous (??), 18:01, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Достойный ответ на отказ многих дистрибутивов от поддержки второго питона. Чем переписывать свой проект, проще его перепаковать статически.
     
     
  • 2.45, Led (ok), 01:04, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Зачем г^Hудобрения перепаковывать?
     

  • 1.37, xi (??), 19:33, 25/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Почему-то не упомянули Cython, который в чём-то похож на Nuitka.

    Почему-то не упомянули модуль zipapp, который включён в комплект CPython 3.5 и может делать архивы и исполняемые файлы (тоже требуется python в системе).

    py2exe НЕ "требует распространения нескольких файлов" - для сборки одного самодостаточного исполняемого файла нужно использовать параметр bundle_files=1 и что-то ещё (не помню, давно не использую винду). Во всяком случае, получались работоспособные самостоятельные .exe, как консольные, так и графические - на wxWidgets.

     
  • 1.49, Неадекват (?), 10:58, 26/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > для сложных проектов на Python, таких как видеоредакторы

    Поубивал бы.

     
     
  • 2.51, Аноним (51), 12:08, 26/06/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Поубивал бы.

    Так вот, кто виноват в том, что у нас до сих пор нет сложных проектов на питоне?.....

     
     
  • 3.59, Аноним3 (?), 18:50, 01/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    на нем реально не хорошо делать сложный проект. вот обвязку над субпрограммами в проекте самое то. или простенькие скрипты с быстрыми расчетами. а если комбайин посерьезнее что то, то лучше все таки компилируемые языки . их обвязать на питоне самое то. тот же ткинтер есть везде.  а вообще писать на питоне прикольно. и проверять скрипты быстро, сам расскажет если где че учудил))
     

  • 1.52, Аноним (52), 13:15, 26/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Началось. Как всегда. Создаём удобный язык для скриптов, потом разрастаем его до всеобъемлющего монстра, потом пытаемся волшебным образом превратить его в нативный. Нездоровой энергии у людей уйма.
     
  • 1.53, Аноним (53), 14:06, 26/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, а 'meson' можно упаковать с помощью этой штуки?
    Наверняка там полно расширений на Си, да и вообще программа сложная
     
  • 1.57, Аноним (-), 01:52, 27/06/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    оно лучше чем nuitka в плане производительности?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру