Представлен (https://gregoryszorc.com/blog/2019/06/24/building-standalone.../) первый выпуск утилиты PyOxidizer (https://pyoxidizer.readthedocs.io/en/latest/index.html), позволяющей упаковать проект на языке Python в форму самодостаточного исполняемого файла, включающего интерпретатор Python и все необходимые для работы библиотеки и ресурсы. Подобные файлы могут выполняться в окружениях без установленного инструментария Python или независимо от наличия необходимой версии Python. PyOxidizer также может формировать статически связанные исполняемые файлы, которые не привязаны и к системным библиотекам. Код проекта написан на языке Rust и распространяется (https://github.com/indygreg/PyOxidizer) под лицензией MPL (Mozilla Public License) 2.0.Проект основан на одноимённом модуле для языка Rust, позволяющем встраивать Python-интерпретатор в программы на Rust для выполнения в них Python-скриптов. PyOxidizer теперь вышел за рамки дополнения для Rust и позиционируется как доступный для более широкой аудитории инструмент для формирования и распространения самодостаточных пакетов с Python. Для тех кому не нужно распространять приложения в виде исполняемого файла, PyOxidizer предоставляет возможности по генерации библиотек, пригодных для связывания с любыми приложениями для встраивания в них интерпретатора Python и необходимого набора расширений.
Для конечных пользователей поставка проекта в виде одного исполняемого файла существенно упрощает установку и избавляет от работы по подбору зависимостей, что актуально, например, для сложных проектов на Python, таких как видеоредакторы. Для разработчиков приложений PyOxidizer позволяет сэкономить время на организацию доставки приложения, без необходимости использования разных инструментов для формирования пакетов для разных операционных систем.
Применение предложенных сборок также положительно сказывается на производительности - сгенерированные в PyOxidizer файлы запускаются быстрее, чем при использовании системного Python за счёт исключения импорта и определения базовых модулей. В PyOxidizer модули импортируются из памяти - все встроенные модули сразу загружаются в память и затем используются без обращения к диску). В тестах время запуска приложения при использовании PyOxidizer сокращается примерно в два раза.Из уже существующих похожих проектов можно отметить: PyInstaller (https://www.pyinstaller.org/) (распаковывает файл во временный каталог и импортирует модули из него), py2exe (http://www.py2exe.org/) (привязан к платформе Windows и требует распространения нескольких файлов), py2app (https://py2app.readthedocs.io/en/latest/) (привязан к macOS), cx-freeze (https://cx-freeze.readthedocs.io/en/latest/) (требует отдельной упаковки зависимостей), Shiv (https://shiv.readthedocs.io/en/latest/) и PEX (https://github.com/pantsbuild/pex) (формируют пакет в формате zip и требует наличия Python в системе), Nuitka (http://nuitka.net/pages/overview.html) (компилирует код, а не встраивает интерпретатор), pynsist (https://pynsist.readthedocs.io/en/latest/index.html) (привязан к Windows), PyRun (https://www.egenix.com/products/python/PyRun) (проприетарная разработка без пояснения принципов работы).
На текущем этапе развития в PyOxidizer уже реализована основная функциональность по генерации исполняемых файлов для Windows, macOS и Linux. Из пока недоступных возможностей отмечается (https://pyoxidizer.readthedocs.io/en/latest/status.html) отсутствие типового сборочного окружения, невозможность генерации пакетов в форматах MSI, DMG и deb/rpm, проблемы с упаковкой проектов, включающих сложные расширения на языке Си, отсутствие команд для сопровождения доставки ("pyoxidizer add", "pyoxidizer analyze" и "pyoxidizer upgrade"), ограниченная поддержка Terminfo и Readline, отсутствие поддержки выпусков отличных от Python 3.7, отсутствие поддержки сжатия ресурсов, невозможность кросс-компиляции.
URL: https://gregoryszorc.com/blog/2019/06/24/building-standalone.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=50957
Звучит неплохо, а как там с библиотеками? Можно напихать в бинарник matplotlib и pyside, pygobject или wxpython? Именно с тяжелыми, зависимыми от кода на C/C++ библиотеками в основном проблемы у всяких упаковщиков и компиляторов питона.
Ещё интересно как программы на QT будут упаковываться
QT написан на Objective C вообще-то.
шта?
как же вы достали, борцуны за правильный регистр одной буквы. контекст, слышал такое слово? из контекста понятно, о каком кутэ идет речь
Это вообще-то баян такой древний. Да и тот, кто действительно работает с Qt, навряд ли будет писать QT.
Ему надо показать свою эрудированность. Не мешай.
Как-то так https://download.qt.io/official_releases/qt-installer-framew.../
Qt Installer Framework есть кроссплатформенный. В том смысле, что скрипт тот же самый - это удобно. Если платформенное приложение пишете, то имеет смысл платформенные же инсталляторы и использовать: есть удобные для Windows, macOS, для Linux посложнее. Библиотеки Qt можно полностью поставить на компьютер пользователя, а можно только необходимые. В последнем случае запускаете свое приложение на "чистом" компьютере и смотрите, каких библиотек не хватает. Их в дистрибутив и копируете. Количество и состав данных библиотек зависит от приложения, компилятора (что-то может потребоваться и из системы разработки приложений), платформы и версии Qt.
А еще интересно, если туда засунуть Numpy + Matplotlib + SymPy. Не будет ли в итоге больше гигабайта все весить. Наверно, если даже удастся скомпилирывать, то будет, так как пока не умеет сжатие ресурсов. Но прокт интересный, было б не плохо конкурирывать с PyInstaller, cxFreeze.
Ты болен что ли?
Там больше сотни мегабайт весить нечему.
Numpy тянет MKL. Он много весит. Собери, посмотри, а потом хами.
накопи уже на Вольфрам Математику в конце то концов
А там можно компилировать. Мне просто надо компилировать ;)
Не проще на Julia перейти?
нет, потому что используется еще куча других пакетов.
> используется еще куча других пакетов.Прекращай нюхать клей - на тебя пакетов не напасёшся.
Перепишите критические вычисления на Julia. Остальной код освободите от питона позже. На Julia можно подключать питон-код для связывания со старыми приложениями. + для Julia есть свой упаковщик.
Надеюсь антивирусы не так убивают скорость запуска с PyOxidizer как это происходит с PyInstaller. Там вообще жесть.
А как интивирусы убивают скорость запуска с PyInstaller? Программы на Python вообще долго запускаются. А, если еще все тяжёлое сожмешь UPX, так вообще около минуты загружается с полтора раза болшим размером оперативы в Windows.
> А как интивирусы убивают скорость запуска с PyInstaller?Учитывая, что PyInstaller суть самораспаковывающийся архив, видимо, они при распаковке, которая происходит при каждом запуске, сканируют каждый файл. Убогая архитектура закономерно порождает убогие проблемы.
Не надо пользоваться антивирусами — это лапша на уши домохозяйкам. Бывает конечно на работе заставляют, но обычно можно попросить исключить некоторые директории из скана.
Самое то, чтобы ждать зоопарк пакетов по дуалапу, вместо апгета и одного пакета.
Контейнеры в винду скоро завезут и будет вам софт гигабайтный. Блокноты на гугле хроме)
Такие уже есть, VSCode
vscodium*
Total disk usage: 266.4 MiB
Контейнеры в винде есть с WS2016 / Windows 10.
> Код проекта написан на языке Rust
> Проект основан на одноимённом модуле для языка Rust, позволяющем встраивать Python-интерпретатор в программы на Rust для выполнения в них Python-скриптовКакое тонкое глумление над Питоном!
Ещё в SNAP прикольно пайтон присовывать
Nuitka для этих целей поинтересней будет. Она преобразует весь питоний код в C/C++ и компилит бинарник.Кстати, названо в честь жены разработчика Анны (Anna -> Annuitka -> Nuitka). Соответственно, читается «Нютка».
А как на счёт тяжелых приложений, да и с Matplotlib, Numpy, SymPy, OpenCV и т.д.? Все компирилует без проблем с C-расширениями?
Если тяжёлое приложение написано без особых изощрений, то «Нютке» в общем пофиг. Что сто строчек в си перегнать, что сто тысяч.NumPy точно поддерживается. Остальное надо смотреть индивидуально. Разработчик очень активен, если какая-то экзотика не заработает, он может достаточно оперативно починить.
Анютка = Aniutka
«Anna -> Annuitka -> Nuitka» — это из презентации самого разработчика с PyCon. Он немец. Видимо, какие-то особенности немецкого написания.
Когда смотрел падала твоя Нуитка с PySide ом докрутить конечно можно, но уж больно геморно под конкретный компилятор код подгонять. Тогда уже cython если нужна скорость.
А есть тоже самое для shell?
Молодость. FIDOnet. 90-е. Вопрос "а есть ли компилятор для bash"…
А вот таки есть что-то https://www.google.com/search?q=bash+compiler* Т.к. bash является надмножеством shell (чуть-чуть не, но не будем придираться), ответ — по теме.
Это disclaimer для выступлений "я не такой, у меня *sh". Всё-таки bash сейчас mainstream, его даже в openindiana притащили "из коробки" вместо ksh.
Вообще сам интерпритатор bash это сильно заторможеный sh. ;-)
Dash же пошол путём ускорения и оптимизаций, по этому я выбрал этот интерпритатор для своих shell скриптов, а bash оставил для врагов. :D
Nix уже есть. Подходит не только для питона.
Потоки там работают так же а чего с памятью гарбидж коллектор там какой?
>>> Для конечных пользователей поставка проекта в виде одного исполняемого файлаСмотря какого размера. Если как у Бульдозера - ок/ больше, лучше уж в snap пихать
А давайте, как гетеросексуальные белые мужчины, просто напишем компилятор Python --> .exe/.c/.asm/go/.deb/snap!
Не тупи уже написали такой компилятор - Golang.
Pyinstaller самый лучший из того что предлагают альтернативы уже давно им пользуюсь. И антивири на него давно уже не ругаются. А Nuitka глюки с сег фолотом глючит c Pyside не понимает конструкции clicked.connect() просит полную версию QObject.connect и слоты с указанием типов передаваемых данных.
вот так раст всех и заборет.
в чём смысл? в большинство linux дистрибутивов входит python, во всяких freebsd, openindiana тоже.Python рантайм очень маленький, на Windows python занимает ~75 мегабайт, та же java 12, 386 мегабайт. Но зато каждый скрипт будет занимать килобайты.
Всегда проще попросить пользователя установить рантайм, чем заниматься такой чушью, нерациональное использование дискового пространства
> в большинство linux дистрибутивов входит pythonпочти наверняка несовместимый с тем скриптом, который пользователь захочет запустить.....
В этом и смысл, что если уж кому и пришло в голову питон использовать, то пусть хотя бы он будет локальным и изолированным.
> Всегда проще попросить пользователя установить рантайм, чем заниматься такой чушью, нерациональное использование дискового пространстваНу да. Линуксоиды не понимают, что на самом деле наоборот.
Достойный ответ на отказ многих дистрибутивов от поддержки второго питона. Чем переписывать свой проект, проще его перепаковать статически.
Зачем г^Hудобрения перепаковывать?
Почему-то не упомянули Cython, который в чём-то похож на Nuitka.Почему-то не упомянули модуль zipapp, который включён в комплект CPython 3.5 и может делать архивы и исполняемые файлы (тоже требуется python в системе).
py2exe НЕ "требует распространения нескольких файлов" - для сборки одного самодостаточного исполняемого файла нужно использовать параметр bundle_files=1 и что-то ещё (не помню, давно не использую винду). Во всяком случае, получались работоспособные самостоятельные .exe, как консольные, так и графические - на wxWidgets.
> для сложных проектов на Python, таких как видеоредакторыПоубивал бы.
> Поубивал бы.Так вот, кто виноват в том, что у нас до сих пор нет сложных проектов на питоне?.....
на нем реально не хорошо делать сложный проект. вот обвязку над субпрограммами в проекте самое то. или простенькие скрипты с быстрыми расчетами. а если комбайин посерьезнее что то, то лучше все таки компилируемые языки . их обвязать на питоне самое то. тот же ткинтер есть везде. а вообще писать на питоне прикольно. и проверять скрипты быстро, сам расскажет если где че учудил))
Началось. Как всегда. Создаём удобный язык для скриптов, потом разрастаем его до всеобъемлющего монстра, потом пытаемся волшебным образом превратить его в нативный. Нездоровой энергии у людей уйма.
Интересно, а `meson` можно упаковать с помощью этой штуки?
Наверняка там полно расширений на Си, да и вообще программа сложная
оно лучше чем nuitka в плане производительности?