Как сделать exe из pygame
Я закончил разработку своей игры в pygame и хочу сделать из нее исполняемый файл, чтобы поделиться им. Я пытался использовать cx_Freeze для создания exe, но в этом уроке он просто добавил только одно изображение, и я был сбит с толку, как я должен добавить столько спрайтов в одну строку. Я следовал этому руководству — https://www.youtube.com/watch?v=BIWqt6NICrw&t=49s
В этом уроке он добавляет только один файл изображения, так как его игра слишком мала. Поэтому я пробовал разные способы. Я пробовал этот метод — Как я могу преобразовать pygame в exe? Но он слишком сложный, и когда я пытаюсь его выполнить, я получаю так много синтаксических ошибок (я пробовал этот метод 10 раз)
Все, что я вижу, остается только один способ разработать exe моей pygame с использованием cx_Freeze, но я не знаю, как это сделать. И я использую python3 (версия: 3.7.3)
Может ли кто-нибудь объяснить мне шаг за шагом, как сделать игру, используя cx_Freeze (пожалуйста, также дайте мне знать, как добавить несколько изображений, так как у меня так много изображений (спрайтов) для разных врагов и героев)
Я говорю о pygame, а не о скрипте python — этот метод здесь не сработает.
Pygame — это просто библиотека, которую вы можете включить в свой скрипт Python. Возможно, уточните, почему этот метод не будет работать?
pygame — это библиотека Python, так что это сработает… возможно, вам придется немного больше настроить, но python — это python. Я успешно использовал py2exe для графических интерфейсов Python, созданных с помощью Qt, с использованием сторонних библиотек несколько раз.
Irwin Kwan
User Experience Researcher | Software Engineering and Human Factors of Computing
Using PyInstaller to make EXEs from Python scripts (and a 48-hour game design compo)
How to Create a Single Windows Executable from a Python and PyGame Project (Summary)
Here’s how you use PyInstaller and PyGame to create a single-file executable from a project that has a data directory that contains resources like images, fonts, and music.
- Get PyInstaller.
- On Windows, you might also need pywin32 (and possibly MinGW if you don’t have Visual Studio).
- On Mac OS X, you will need XCode’s command line tools. To install the Command Line tools, first install XCode from the App Store, then go to Preferences – Downloads and there is an option to download them there.
- Modify your code so that whenever you refer to your data directory, you wrap it using the following function:
An example of usage would be
- Windows: (You want a single EXE file with your data in it, hence —onefile ).
- Mac OS X: (You want an App bundle with windowed output, hence —windowed ).
- Windows: Modify the section where it says exe EXE = (pyz, and add on the next line:
- Mac OS X: Modify the section where it says app = BUNDLE(coll, and add on the next line:
Phew! That took me a long time – the better part of a few hours to figure out. This post on the PyInstaller list really helped.
So why was I trying to package a Python executable file anyway? Read on…
Ludum Dare 26: 48-hour Game Design Compo
This weekend, I decided to participate in a 48-hour game design “competition”. Ludum Dare is a compo that asks you to create a video game from scratch in a 48-hour time period – you have to write your code and create all of your assets in that time period.
This means no reusing graphics, pictures, music, or sound from other projects, for example. You’re also not supposed to reuse code either. I decided to participate on the Thursday the day before. Most people use the previous weekend as a “warmup weekend” to test their tools, get some practice, and so forth. (My entry is located here, by the way).
I’ll do a more detailed compo writeup later, but I just want to concentrate on one thing that kept me up for hours after the competition: getting a Windows executable created from a Python project that uses PyGame and a data directory.
Python, Distribution, and You
I rather enjoy Python as a programming language. The syntax is reasonably concise, the language does a lot of things for you, and it’s well-laid out. There’s also a lot of good support in the form of third-party libraries. I’ve been using Python for various things for the past few years (usually small scripts for data extraction and analysis in research).
One thing I had never thought about before was distributing a Python project as an executable package, and while it was on my mind throughout the entire compo, I didn’t actually learn the process of creating the package until the last hour of the comp before submission. After you submit your primary platform, Ludum Dare allows you around 48 hours to compile for Windows, since the majority of reviewers use Windows.
The ideal submission is a single binary file (an .exe file for Windows) that doesn’t have to extract a lot of data, so that it’s easy for people to download and run your game.
PyInstaller vs. Py2exe vs. Py2app
I went on a wild goose chase trying to find out how to make a single executable file out of a Python project that would include all of my data assets. I first tried py2exe and py2app. py2app mostly worked all right, but py2exe was a pretty big mess.
The end story is that PyInstaller is newer and shinier than py2exe, and that you need to secret sauce code that someone out there on the Internet found before I did. PyInstaller basically runs EXE files by extracting the assets into a temporary data file that has a path _MEIPASS in it ((technical details here). Be sure that you check that every file is loaded in through that wrapper. The Tree() TOC syntax was also confusing, but basically, it’s the relative path of your data files and it will automatically load all of the files in that directory. Make sure it exists in the EXE portion (Windows) or the APP portion (Mac).
There’s a Make/Build cycle in PyInstaller to generate the spec file and build it in a single step as well – I find it easier to do that to generate the spec file and do an initial binary run, then to modify the spec and run PyInstaller again with the spec file as the argument. PyInstaller is pretty smart about rebuilding, and you save a lot of time.
I think in the long run, if you compare py2exe, py2app, and PyInstaller, PyInstaller is the program worth learning. It did have a pretty sharp curve for me – it didn’t help that I was trying to do this late at night after a challenging weekend!
If you do wish to use py2app to build your Mac OS X application bundle, then do keep in mind that you need to have a import pygame._view because of some kind of obscure issue.
Статья Пакуем Python в EXE
Всем известно что питон это интерпретируемый, а не компилируемый язык . И в первую очередь рассчитан для работы в командной строке. Тем не менее, существует много вариантов оформления кода в GUI при необходимости. Но сегодня речь пойдёт об упаковке программы в EXE.
Зачем вообще это надо? Да по сути и не надо в большинстве случаев. Но бывает, что вы написали или скопировали какую-нибудь интересную тулзу, и хотите с ней поделиться. Конечно, если у того, кому вы отправляете прогу есть Python, то проблем нет. А бывает, что человек не шарит совсем в кодинге, и как пользователь тоже не имеет установленного питона нужной версии.
Вот тогда и выручает упаковка файла или файлов в EXE. Такой файл будет запускаться и работать по клику мышки, всё очень просто.
Для сборки файлов в экзешник есть разные приложения. Я рассмотрю самый простой, без всяких заморочек, с которым разберётся любой новичок.
Распаковываем архив. Внутри папки будет конвертер, запускающийся по клику мышки.
Так, нам понадобится подопытный. Для этого я сотряпал простой текстовый редактор, который открывает файл, и после редактирования сохраняет его. Ну или просто в окне можно что-то написать и сохранить.
Выставляем следующие настройки -windowed чтобы прога запускалась без консоли, название выходного файла, onefile чтобы сборка была в один файл, noupx уже стоит по умолчанию ибо сжатие не всегда прокатывает. Ну и собственно выбираете нужный файл питоновский, который будете упаковывать. Также есть возможность выбрать иконку для exe-шника, поддерживается только ICO.
Вот что получилось
Жмём Build, прога чуток поколдует, выдаст нам сообщение об успешной сборке.
После этого в папке с конвертором появятся 2 папки
В папке dist и будет лежать наш готовый дистрибутив в формате EXE. Переместите его куда угодно, а потом обе эти папки можно смело удалять. Теперь проверяем работоспособность выходного файла, кликнув на него.
P.S. Редактор писался второпях, там есть косячок — при сохранении файла, расширение само не ставится, нужно вручную писать. Если кто поправит, буду признателен. Мне уже некогда, уезжаю отдыхать на 2 недели сейчас, так что на форуме меня не будет это время.
explorer
- Сообщения 1 059
- Реакции 2 403
товарищ Сухов
- 10.09.2018
- #2
Размер собранного уже составляет 13827КВ. При запуске мелькает пустое окно приложения и закрывается. Файлы с картинкой и музыкой, разумеется, присутствуют.
Как же хорош мой любимый и родной С.
explorer
- 13.09.2018
- #3
Ну вот я и вернулся с моря. Очень хорошо что есть баг, это заставило меня провести небольшое исследование по сборке файлов в EXE.
Для этого я прогнал разные ресурсы и выяснил по крайней мере 3 причины, по которым компилл не получается как надо.
Грабли, грабли, грабли.
1. Отсутствуют некоторые библиотеки dll в самой винде.
2. Присутствует скрытый импорт в модуле. В музыкальной открытке есть предупреждение: WARNING: Hidden import "pygame._view" not found!
Соответственно сборщик не может знать путей к нужному модулю.
3. Файл "моя программа.py" изначально не запускается двойным кликом мышки, а лишь через IDLE и т.п.
1 пункт решается просто — из лога копипастим название dll, гуглим, скачиваем нужную библиотеку и добавляем в system32.
2 пункт можно обойти заменой на схожий модуль ( а ведь всегда есть варианты), но не имеющий скрытый импорт.
3 Ну здесь даже если не будет ни одной ошибки или предупреждения, то сборка обречена на провал. И единственным выходом будет переписать код программы.
Наверняка и другие проблемы бывают, это лишь то что я увидел.
Вывод можно сделать следующий — не все программы корректно соберутся, и если какую-то программку очень нужно собрать в экзешник, придётся её перепиливать. И это может занять больше времени, чем изначальное написание.
Так как за 2 недели никого не нашлось, кто поправил бы код, делаю это сам
Всё просто — аргумент ‘defaultextension’ не указал, всего лишь добавить его в функцию extractText нужно, получится так:
Теперь выбранное расширение подставляется к имени файла.
Более сложные программы можно собрать через другие тулзы. Правда работать чуток посложнее, больше телодвижений. Одна из программ cx_Freeze.
Сначала нужно установить wheel. В cmd вводим pip install wheel или pip3 install wheel
выбираем и скачиваем нужную версию cx_Freeze
Скачанный файлик кидаем в корень диска С и в cmd вводим команду:
pip install С:\cx_Freeze-5.1.1-cp36-cp36m-win32.whl (название своей версии, если оно отличается)
В каталоге с программой которую нужно скомпилировать создайте файл "setup.py" в который разместите код:
Последний этап — переходим в cmd в папку с программой, которую нужно упаковать и вводим команду python.exe setup.py build
При успешной сборке появится папка build, в которой и будет наш EXE.
К сожалению, в отличии от pyinstaller, сборка не будет в один файл, а будет куча библиотек и прочего, без которых экзешник работать не будет. По сути мы получим портабл версию. В этом минус. Плюс заключается в том, что настройки гибкие, и даже очень упрямые программы можно собрать этим инструментом.
Попробовал собрать открытку из темы Ваяем музыкальную открытку на Python со стандартным файлом setup.py ничего не получилось. Пришлось колдовать часа 1,5 чтобы решить все вопросы.
Сначала cx_Freeze ругалась на модуль tkinter, так как не могла найти пути к tcl8.6 и tk8.6. Вручную прописал, на этом трудности не закончились. Дальше захотелось ей dll-ок, тоже добавил. Вдоволь поизвращавшись, прога успешно собралась.
Однако бесячее окно с надписью от модуля pygame резало глаза
Ещё малость шаманских танцев с бубном и наши победили )))
Весь этот гемор я победил лишь из-за спортивного интереса
Кстати открытка с переписанным кодом в Pyinstaller тоже успешно собралась без всяких танцев с бубном
товарищ Сухов
- 23.09.2018
- #4
Блестяще, просто блестяще. Спасибо, коллега, за подробную информацию и проделанную работу. Под такими упорными людьми прогнется любая система.
Какие же выводы мы можем сделать из всего этого? Главное, что напрашивается — Python все же мало пригоден в качестве компилируемого языка. Конечно он — совершенно гениальное изобретение ван Россума, с мощной и гибкой динамической типизацией, простым синтаксисом и просто гигантским набором библиотек. Язык прочно занял свою "нишу", обширную даже по сравнению с древними языками общего назначения. Но программист не должен зависеть от инструмента, а выбирать подходящий для конкретной задачи.
Примерно та же история была с Forthом. Чарльз Мур изобрел его для embedded-системы — системы управления телескопом. И Форт действительно хорош именно для встроенных систем: по сути это операционная система малого объема, которая позволяет расширить свой функционал в любом нужном направлении описанием прямо в ней новых типов и средств работы с ними. Но сколько ни пытались сделать Форт широко используемым — ничего у них не вышло. Я тоже пробовал разрабатывать на нем, но, как только добрался до механизмов манипуляции стеком возвратов, понял, что там можно сломать все копья и наломать дров, а результат будет зависеть от конкретной реализации.
PS Посмотрел тесты производительности на одном и том же железе для Java, Python и C (задача была на формирование и обсчет большой матрицы) и почти не удивился: первые два от 28 до 40 раз медленнее.