Найти - Пользователи
Полная версия: Упаковка проекта на Python 3 в один .exe
Начало » Python проекты » Упаковка проекта на Python 3 в один .exe
1 2
evgen34
Для тех, кто хочет упаковать свой проект на 3-м питоне в один исполняемый ехе-шник, то это можно сделать в 2 шага:
1) Собрать проект с помощью cx_Freeze. О том, как это сделать - информации можно найти достаточно.
2) Виртуализировать полученную в cx_Freeze структуру с помощью Enigma Virtual Box. Во-первых, программа бесплатная, во-вторых, разработчик не накладывает никаких лицензионных ограничений на получившийся исполняемый файл. В enigm-е нужно не забыть поставить галочку во вкладке “Опции” напротив “Копировать виртуальную систему во все дочерние процессы”, иначе работать не будет.
В итоге получается один исполняемый файлик и ничего “лишнего”. При исполнении ничего никуда не распаковывается. Остается свободный доступ к файловой системе: например, если в проекте встретится строка open('some_file'), то программа в таком виде сначала посмотрит в свою виртуальную файловую систему, и если там файла с таким именем не окажется, откроет его из реальной папки, в которой запустили ехе-шник.
Очень удобно. Всем спасибо.
doza_and
evgen34
Для тех, кто хочет упаковать
evgen34
и ничего “лишнего”
К этому сладкому посту просится добавить ложку дегтя.
тема ложки: Желательно не хотеть упаковывать все в один исполняемый модуль

Конечно не во всех случаях в жизни, но чаще всего.
Вы не задавались вопросами?
  • Если оно работает то значит питон там уже внутри? Если поставляется много exe то столько раз и будет скопирован питон?
  • Как поправить файл у заказчика/ попросить заказчика назвать версию кода/ показать продвинутому заказчику чем оно стало лучше?
  • Насколько это удобно если у заказчиков разные операционные системы/разная разрядность OS?
  • Какой вид устойчивее к действию вирусов?
  • Если распространять по почте, то как бороться с тем что многие почтовые сервисы режут исполняемые модули?
  • Почему этот форум и интернет наполнены просьбами заставить работать собранные таким образом исполняемые модули?
  • Почему серьезные программы распространяются в виде дистрибутивов а не тупым копированием?
  • Почему никого не смущает запуск jar,pl,php,…файлов или требование наличия нужной исполняемой среды для C#, java?
  • И наконец почему этот функционал так никак и не вставят в стандартную поставку питона?

evgen34
Уважаемый doza_and!
В вашем сообщении много правильных мыслей, но это выглядит так, что вы меня неправильно поняли. Эта тема открыта для того, чтобы поделиться опытом, в виде пожелания. Я никого не призываю виртуализировать всё подрят. Вы, наверно, смотрите на подобные решения, как специалист. Ваше негодование мне понятно.
В питоне я не силён, однако с удовольствием пишу для себя и своего окружения небольшие простые программки, в основном для повторяющихся или необычных действий с текстом или интернетом. Многие из друзей с компьютером “на Вы” и для них долго объяснять, зачем устанавливать какой-то интерпретатор, да и не нужно это. А програмка в одном еше-шнике для них понятна.
Из своего опыта скажу, что не всегда, но бывают случаи, когда программу так запаковать просто необходимо.
И если вы обратили внимание, ничего “лишнего” я написал в кавычках. Только как один из вариантов. Может кому пригодится.
doza_and
evgen34
Ваше негодование мне понятно.
Тут нет никакого негодования. Я попытался соблюсти равновесие. Чтобы люди наткнувшись на пост трезво оценили за и против. Я как и вы написал, что в некоторых случаях это может быть неплохим решением.
Наверное для симметрии неплохо перечислить случаи когда такое решение имеет смысл. Кроме того, неплохо добавить ссылки на документацию или проект.

evgen34
Многие из друзей с компьютером “на Вы”
Это довольно слабый аргумент. По моему опыту что одну программу запустить что запустить setup.exe обе вещи одинаково воспринимаются. А друзьям программы ставишь обычно лично, они тебе доверяют и вообще ничего не спрашивают. Хоть 10 интерпретаторов ставь. Тыкают потом в ярлык и все.

Случаи когда это может быть удобно:
  • защита кода от несанкционированного просмотра и изменения (правда довольно слабая)
  • выполнение кода в портативном варианте (с флешки на чужих машинах например) Я правда предпочту сначала создать виртуальное окружение, а потом уж работать. Но на вкус и цвет товарищей нет.

Может еще что придумаете. Добавляйте.
evgen34
Могу добавить, что программа в таком виде работает самостоятельно, а в процессе использования это свойство может оказаться полезным. Можно, например, пользоваться обычным скриптом, но в запасе иметь собранный пакет - на всякий случай, ведь все ситуации не предугадаешь. Лишним не будет.
Я не хочу сравнивать плюсы и минусы - в любом случае минусов больше. Главный из них - это убийство достоинства быстрой правки кода.
По-моему мнению, когда имеется под рукой запасной самостоятельный пакет, достоинства программы только увеличиваются: у ней появляются новые, дополнительные полезные свойства. При этом сохраняются те, которые были.
4kpt_II
Мое мнение полностью совпадает с doza_and, хотя раньше сам упаковывал в .exe. Не буду лукавить. Но когда я перешел на никсы, я понял, что это не есть гуд. Убогая виндовская философия мне стала противна.

evgen34
Могу добавить, что программа в таком виде работает самостоятельно

Ой не факт. Был случай, когда одна и та же программа работала на одной машине и не работала на другой. И причем на одинаковых осях. Плюс, если нужно будет расширить проект парой самописных модулей, то нужно опять перепаковывать все это в новый .exe. О простом добавлении файла по нужному месту можно забыть. О расширении модулями из pip тоже Простая работа с системой контроля версий - тоже проходим мимо А Вы ей со временем начнете пользоваться обязательно. А с базами как? Их все равно придется ставить!!! Хотя если использовать sqlite, то он уже есть в питоне и Вы убьете двух зайцев сразу.

P.S. Поэтому pip в руки и вперед. Я не поверю, что установить питон и вызвать одну команду в командной строке будет неподъемной задачей для пользователей, даже для тех, которые на Вы с компьютером. Как игры и программы ломать - то все умеют и быстро учатся Научаться и тут. Главное, чтобы программы были качественные, нужные и ценные…

P.S.S. Для друзей, которые вообще на ВЫ с любой техникой, круче дискового телефона, можно написать короткий tutorial с изображениями окон и списков файлов. Я так делал для студентов. Могу скинуть один для примера. У меня даже студенты, которые работали за компьютером меньше месяца легко ставили нужные пакеты и легко запускали результат. Так что я в Вас верю.
evgen34
4kpt_II
А Вы ей со временем начнете пользоваться обязательно.
Не обязательно.
4kpt_II
А с базами как? Их все равно придется ставить!!!
Если нет необходимости - не придётся.
4kpt_II
Главное, чтобы программы были качественные, нужные и ценные…
А вот здесь с вами совершенно согласен. Когда программа действительно нужная, работает, ей пользуются и результатами довольны, то не так важно, соблюдены ли стерильные условия, рекомендации специалистов, советы врачей и прочее-прочее… Виртуализация - это только как один из дополнительных вариантов, так сказать для работы в полевых условиях. И естественно, что не для крупных проектов.
Не хотелось бы превращать тему в противопоставление чего-то с чем-то или выявления кто “за”, кто “против”. Эта тема даже не совет, а больше подсказка “для тех кто хочет”. Хотелось бы, чтобы специалисты поделились опытом, как лучше собрать весь проект на 3-м питоне в один пакет. В шапке был предложен один из вариантов.
Для своих нужд я работаю со скриптами, но упакованный пакет держу в запасе. Пока от этого ни разу не проиграл. И не смотря на то, что у вас “был случай”, возможность виртуализации - это преимущество над такими тяжеловесами, как ява и другие. Не для каждой ситуации, но бывают варианты, когда такое применение оправдано. Один из примеров, как предложил doza_and - защита кода от несанкционированного просмотра и изменения.
4kpt_II
evgen34
Не обязательно.
Тогда будете кодить на коленке. Нужно привыкать пользоваться современными технологиями. Тем паче, если вы хотите писать нормальное ПО.

evgen34
Если нет необходимости - не придётся.
Сложно себе представить современное ПО без связи с БД. Тем более очень всем нужное Но да ладно. Вы знаете, что делаете.

Я понял. Хотите использовать пень-колодные подходы для распространения ПО - пожалуйста. Только тогда не обращайтесь за помощью к специалистам. Ибо им такие извращения чужды

P.S. Весь проект собрать в один пакет вместе с питоном будет сложно. Проще написать проект. Написать к нему нужные зависимости. А потом все это установить одной командой. Но это как по-мне. Может кто-то и что-то посоветует.

P.S.S. Гляньте. На форуме в теме “Python для новичков” где-то поднималась тема. Там было предложено множество вариантов. Где-то три или четыре. Так что можете глянуть на досуге. Может там есть то, что Вам нужно.


evgen34
Посмотрю. Спасибо
sypper-pit
http://choorucode.com/2011/06/02/how-to-convert-python-script-to-exe-using-pyinstaller/
Можно же сдавить вот так
Converting a Python script into a EXE file is a convenient way to share it among other computers or users who do not have Python installed. PyInstaller makes this process really easy! Here is how:

Download and unzip PyInstaller. It is not a Python library, so it does not need to be installed into Python. Let us assume the unzipped files are placed in C:\PyInstaller
Open a Command Prompt in the PyInstaller directory and configure it using: python Configure.py
Open a Command Prompt in the directory containing your Python script (say Foo.py). I assume you want to convert it into a single EXE file. Create a spec file for Foo.py by using: python C:\PyInstaller\Makespec.py --onefile Foo.py This generates a Foo.spec file.
Build the EXE file for Foo.py by using: python C:\PyInstaller\Build.py Foo.spec
Your Foo.exe file is now ready for distribution and can be found in the dist directory! :-)
Tried with: PyInstaller 1.5, Python 2.7 and Windows 7
http://stackoverflow.com/questions/17133271/pyinstaller-2-0-make-exe-file

The command line I use to build my exe with pyinstaller is:

c:\python27\python.exe c:\pyinstaller\pyinstaller.py --noconsole --onedir --workpath="C:\Users\alan\Documents\python" "C:\Users\alan\Documents\python\piechart.py"
Change --onedir option to --onefile if you want a stand alone exe.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB