Pull to refresh

Comments 16

Вот бы ещё осветили создание exe со скриптом из ОС Linux (=
К сожалению я ленив, и все никак не дойдут руки заставить себя больше сидеть в linux с целю самообучения. Пока что я просто пользователь xubuntu на виртуальной машине, изучающий основы.
По крайней мере с помощью PyInstaller это невозможно. Как они пишут, «теоретически это возможно, но вне наших приоритетов». Т.е. под Linux получится выполняемый файл, специфичный для того же Linux (ELF).
Под wine у меня получалось собирать.
Не могли бы вы вкратце рассказать о преимуществах 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