The limitations of the Make Runtime
Function is that it can only work on the Blend file that's currently open. If your game has external assets (unpacked textures, unpacked sound, other blender file as libs, external Python modules), these will not be packaged automatically.
But it's definitely possible to make a stand-alone package with all the Python modules. It's just a matter of knowing where everything goes.
Python Module Basics
- Understand where Python looks for modules (hint: local modules override system modules)
- Because the current path of the Blend file is always the first place Blender will look for Python modules, you can just place any module right next to the Blend file. Alternatively, I'd like to keep all my non-standard modules in one folder. So if you have a
myModule
, I would place it in a directory called externs
.
- You can access modules you've placed under
externs
by import externs.myModule
Packaging
For packaging a runtime to include all the external libraries, you just need to keep everything in place relative to the Blend file, since the blend file is always going to be your starting point. This applies to Python scripts/modules as well as unpacked asset such as textures and sound.
Pure Python modules are easier to deal with because you don't have to worry about them not working on different OSes. For dynamically linked libs (dlls/so's), just make sure you have a working version for each of the platform you are releasing for.
Folder Structure
Unfortunately, the structure of a packed runtime is slightly different for each OS. So you'd have to know where the Blend file is in order to copy the py modules to the right place.
On the mac, a runtime is pretty much the original blenderplayer.app
with a game.blend file stored under the blenderplayer.app/Content/MacOS/Resources/
directory. So typically all your external asset that's not packed by make runtime
need to go in the myGame.app/Content/MacOS/Resources/
folder.
On Windows, a single .exe is created that contains the blend file. So, any external asset go relative to the .exe file.
I believe Linux is the similar to Windows, external asset go relative to the binary blob.
Hope that helps!