I\'m making a pygame program that is designed to be modular. I am building an exe with pygame2exe of the file main.py, which basically just imports the real main game and ru
After some experiments I've found a solution.
Create a separate folder source
in the main folder of the application. Here will be placed source files. Also place file __init__.py
to the folder. Lets name a main file like main_module.py
.
Add all of its contents as a data files to the py2exe configuration setup.py
. Now after compiling the program, these files will be placed in the dist folder.
data_files += [('source', glob('source/*.py'),)]
setup(
data_files=data_files,
.... # other options
windows=[
{
"script": "launcher.py",
"icon_resources": [(0, "resources/favicon.ico")]
}
)
Make launcher.py
- it's task is to import all system and required libraries like pygame, pyqt and so on. Then run you program:
import sys, time, os, hashlib, atexit # std modules
import PyQt5, ... # foreign libraries
sys.path.insert(0, 'source')
exec('import main_module')
Now main_module.py
will be imported, if it imports your modules, they will be imported too in their places in hierarchy. For example head of the main_module.py
can be like this:
import user_tweaks
from user_data import parser
These files user_tweaks.py
and user_data.py
should be located in source
folder at appropriate paths relative to main_module.py
.
You may change contents of source
folder without recompilation program itself. Any time program runs it uses fresh contents of source
.
As a result you have an application folder with:
Last summer I have been struggling with the same problem - build single .exe from python script. However there was no PyGame, but there was a PyQt5, which added some problems alike. None of the pure standard tools helped me.
Finally I'd solved the problem with a chaine: make + Py2exe + 7Zip + Resource Hacker. This set gave me single .exe with all the resources onboard, which don't require installaton - so you can put it everywhere on windows box and run.
Here's detailed article: exe built with cx_Freeze, PyQt5, Python3 can't import ExtensionLoader_PyQt5_QtWidgets.py and run
Please, feel free to ask any questions.