Find games for macOS like Long Gone Days, Linda & Joan Prologue: “Four Months Earlier”, Caves of Qud, Gravity Ace (Early Access), When The Night Comes on itch.io, the indie game hosting marketplace. Find games for macOS tagged Fast-Paced like Extinction Island (DEMO), Redmatch 2, Sonic Revert, Verlet Swing, Wild Woods on itch.io, the indie game hosting marketplace. Hey, After a long time mac user I have waited patiently fot hte new mac pro, but the entry model specs and price are as you know a no go. I need to find the right build for my first hackintosh, but it seems that there are no 'full compatible parts lists' as I thought there would be. There is tony86 but they only reference to specific vendors (for example I couldn't find any Noctua CPU fans in. Aug 19, 2014 Most run on Linux and Mac OS X, and most also run on fairly modest PCs; in fact, I’ve spent more time gaming on my now 2011 Macbook Air in the last year than I have on any other system. I’m sure I’ll want to play another big-budget graphical powerhouse eventually, and I’m not yet sure what I’ll do about that.
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.
data
directory, you wrap it using the following function:An example of usage would be
This is mostly for convenience – it allows you to access your resources while developing, but then it’ll add the right prefix when it’s in the deployment environment.
font = Font(None, 26)
. Instead, use something like font = Font(resource_path(os.path.join('data', 'freesansbold.ttf')), 14)
..spec
file.--onefile
).--windowed
)..spec
file so that you add your data
directory (note that these paths are relative paths to your main directory.exe EXE = (pyz,
and add on the next line:app = BUNDLE(coll,
and add on the next line:.exe
or your .app
bundle in the dist
directory.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…
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.
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.
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.
Anyway, that’s all there is to this post for now.
Here’s the setup.py I used for py2app.