Pull to refresh

Comments 16

Вот бы ещё осветили создание exe со скриптом из ОС Linux (=
К сожалению я ленив, и все никак не дойдут руки заставить себя больше сидеть в linux с целю самообучения. Пока что я просто пользователь xubuntu на виртуальной машине, изучающий основы.
По крайней мере с помощью PyInstaller это невозможно. Как они пишут, «теоретически это возможно, но вне наших приоритетов». Т.е. под Linux получится выполняемый файл, специфичный для того же Linux (ELF).
Не могли бы вы вкратце рассказать о преимуществах pyinstaller перед py2exe? В чем разница?
1) Кроссплатформенный
2) Меньше проблем при переносе собранного экзешника между различными версиями винды. В py2exe без специального хака распространены следующие проблемы: www.google.ru/search?&q=py2exe+ImportError:+DLL+load+failed

Но мне в целом больше нравится py2exe — он ничего не распаковывает во временную директорию и возможностей кастомизации у него (насколько я понял) больше.
> 1) Кроссплатформенный
Вот с этого места можно поподробней…
.
>В py2exe без специального хака распространены следующие проблемы:
Если ложить pythonXX.dll рядом с exe'шником, то проблем быть не должно…

>py2exe — он ничего не распаковывает во временную
Эм… Еще больше не понимаю.
Грубо говоря, на выходе py2exe создается папка, с exe запускалкой, и со всем необходимым для переноса приложения (dll ки, pydы, library.zip), и все это «слинковано». А на выходе pyinstaller что? И что в linuxе получается?
Я не призываю использовать py2exe, просто хочу выяснить как он работает. Не хотели бы вы написать более подробную статью?
> Вот с этого места можно поподробней…
Подробнее — на официальном сайте. Вкратце: с помощью pyinstaller'a можно собирать самораспаковывающиеся инсталляторы (я бы их так назвал) для питоновских скриптов\проектов для нескольких различных ОС (Win, MacOS, Linux, Irix), в то время как py2exe умеет «мастерить» только экзешники.

> Если ложить pythonXX.dll рядом с exe'шником, то проблем быть не должно…
Дело не в питоновской либе (без неё вообще ничего не заработает), а в скомпиленных сишных модулях, которые вы можете использовать в питоновском коде. Например у вас сложный проект и вы используете PyWin32 и wxPython, которые содержат достаточного много .pyd файлов. Собрав свое приложение под Windows 7 и попробовав запустить его на Windows XP, вы с 90% вероятностью получите что-то типа этого: stackoverflow.com/questions/1979486/py2exe-win32api-pyc-importerror-dll-load-failed. А всё потому, что при сборке py2exe подхватывает по зависимости dll-ки из 7-ки и на Windows XP пытается импортировать оттуда необходимые функции, поэтому, собственно, и обламывается. Я в своё время писал что-то типа «билдовой системы» для сборки питон-проектов в экзешники, и там пришлось изучить все известные баги и ворэраунды для py2exe. А уж сколько там напильником пришлось допиливать для того чтобы добавить поддержку питона 2.6 — это я даже пересказывать не решусь.

> Грубо говоря, на выходе py2exe создается папка, с exe запускалкой, и со всем необходимым для переноса приложения (dll ки, pydы, library.zip), и все это «слинковано». А на выходе pyinstaller что? И что в linuxе получается?
Напишу как работает вкратце:

Pyinstaller: собирает все используемые в проекте модули и зависящие от них модули в одну папку, туда же идут pywintypes.dll и pythonXX.dll в одну директорию и запаковывает её в архив, этот архив присоединяется к bootloader'у — это маленький бинарничек, который выполняет всю полезную работу, а именно распаковывает архив в темповую директорию и запускает оттуда нужный скрипт.

Py2exe: алгоритм почти такой-же за исключением того, что 1) бутлоадер не распаковывает архив, а извлекает необходимые из него модули на лету, необходимость определяется специальным хуком на импорт модулей (находится в файле zipextimporter.py), 2) если правильно настроите параметр bundle_files, то можно включить pythonXX.dll в сам бутлоадер и он будет загружать её из самого экзешника (это может привезти к ошибкам загрузки некоторых сторонних модулей)
>этот архив присоединяется к bootloader'у — это маленький бинарничек, который выполняет всю полезную работу, а именно распаковывает архив в темповую директорию и запускает оттуда нужный скрипт.
Вот именно это нужно было узнать. Спасибо! То есть отдавать конечное приложение можно в виде одного исполняемого файла, который не требует установки.
И последний вопрос: есть ли возможность «на лету» менять содержимое этого архива? То есть «запихивать» обратно измененный файл с настройками программы?
> И последний вопрос: есть ли возможность «на лету» менять содержимое этого архива? То есть «запихивать» обратно измененный файл с настройками программы?

Ну теоретически такая возможность есть (я имею ввиду метод add в файле archive.py), но она влечет за собой несколько сложных махинаций с экзешником, поэтому я настоятельно советую ей не пользоваться.
Полиморфный вирус на питоне? xD
Будете смеяться, из вики:
Некоторые антивирусы распознают Frets on Fire для Win32 как вирус. Это происходит из‑за того, что игра скомпилирована в исполняемый файл с помощью утилиты py2exe(англ.), которая так же использовалась для создания кейлоггера Backdoor.Rajump. При создании вирусного описания этого кейлоггера была допущена ошибка, что и является причиной ложной идентификации игры как вируса
>> Так как планируемые приложения могли быть запущены не только на ос, в которых установлен сам Python, было решено собирать exe

У меня была похожая задача, мне нужно было сваять пару утилит для клиента. Мне по душе Java/C#/Ruby но решил что эти языки не очень подходят для быстрых клиентских утилит.

Случайно нашел для себя язык Vala live.gnome.org/Vala/Tutorial

Тот же C# но создает *очень* быстрый код. Быстрее/сравнимый с С++, но программы куда более читабельные чем С/С++ code.google.com/p/vala-benchmarks/wiki/BenchResults
Одно дело «быстрая» утилита, другое дело «быстро написать» утилиту. У автора поста второй случай, у вас первый.

И да — хорошо, когда клиент на Linux, а если под Windows? Vala уже позволяет писать Win-приложения?
>> Одно дело «быстрая» утилита, другое дело «быстро написать» утилиту. У автора поста второй случай, у вас первый.

У меня и первый (нужно нативное приложение) и второй случай одновременно :) Плюс я пытался выучить что-нибудь новое. Вначале выбирал между Go и D в результате написал на Vala. Мне понравилось что синтакс очень близок к Java/C#

> И да — хорошо, когда клиент на Linux, а если под Windows?
На Linux/MacOSX работает отлично. К сожалению на windows не пробывал. Официально GLIB/GTK имеются под эту операционку www.gtk.org/download-windows.html но подозреваю что использование Vala под Windows не лишено подводных камней.
мне больше cx_Freeze подошел (http://cx-freeze.sourceforge.net/)

тоже кросс платформенный, и работает сходу. более того python 3.1 поддерживает, а py2exe и pyinstaller
Sign up to leave a comment.

Articles