Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork58
python and pygame wasm for everyone ( packager + test server + simulator )
License
pygame-web/pygbag
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Python WebAssembly for everyone ( packager + test server )
Intro :https://github.com/pygame-web
Community Documentation :https://pygame-web.github.io
Runs python code directly in modern web browsers, including mobile versions.
Quick Start:
"your.app.folder" must contain a main.py and its loop must be async aware eg:
importasyncio# Try to declare all your globals at once to facilitate compilation later.COUNT_DOWN=3# Do init here# Load any assets right now to avoid lag at runtime or network errors.asyncdefmain():globalCOUNT_DOWN# avoid this kind declaration, prefer the way aboveCOUNT_DOWN=3whileTrue:# Do your rendering here, note that it's NOT an infinite loop,# and it is fired only when VSYNC occurs# Usually 1/60 or more times per seconds on desktop# could be less on some mobile devicesprint(f""" Hello[{COUNT_DOWN}] from Python""")# pygame.display.update() should go right next lineawaitasyncio.sleep(0)# Very important, and keep it 0ifnotCOUNT_DOWN:returnCOUNT_DOWN=COUNT_DOWN-1# This is the program entry point:asyncio.run(main())# Do not add anything from here, especially sys.exit/pygame.quit# asyncio.run is non-blocking on pygame-wasm and code would be executed# right before program start main()
Usage:
pip3 install pygbag --user --upgradepygbag your.app.folderCommand help:
pygbag --help your.app.folderExample :
user@pp /data/git/pygbag $ py -m pygbag --help test/main.py *pygbag 0.8.2*115: cache 0.7.2 mismatch, want 0.8.2, cleaning ...Serving python files from [/data/git/pygbag/test/build/web]with no security/performance in mind, i'm just a test tool : don't rely on meusage: __main__.py [-h] [--bind ADDRESS] [--PYBUILD PYBUILD] [--app_name APP_NAME] [--ume_block UME_BLOCK] [--can_close CAN_CLOSE] [--cache CACHE] [--package PACKAGE] [--title TITLE] [--version VERSION] [--build] [--html] [--no_opt] [--archive] [--icon ICON] [--cdn CDN] [--template TEMPLATE] [--ssl SSL] [--port [PORT]] [--disable-sound-format-error]options: -h, --help show this help message and exit --bind ADDRESS Specify alternate bind address [default: localhost] --PYBUILD PYBUILD Specify python version [default:3.11] --app_name APP_NAME Specify user facing name of application [default:test] --ume_block UME_BLOCK Specify wait for user media engagement before running [default:1] --can_close CAN_CLOSE Specify if window will ask confirmation for closing [default:0] --cache CACHE md5 based url cache directory --package PACKAGE package name, better make it unique --title TITLE App nice looking name --version VERSION override prebuilt version path [default:0.8.2] --build build only, do not run test server --html build as html with embedded assets (pygame-script) --no_opt turn off assets optimizer --archive make build/web.zip archive for itch.io --icon ICON icon png file 32x32 min should be favicon.png --cdn CDN web site to cache locally [default:https://pygame-web.github.io/archives/0.8/] --template TEMPLATE index.html template [default:default.tmpl] --ssl SSL enable ssl with server.pem and key.pem --port [PORT] Specify alternate port [default: 8000] --disable-sound-format-error audio files with a common unsupported format found in the assets won't raise an exceptionunlisted developper options:
--git force cdn use of pygbag current git github CI build--dev change port to 8666 and use local build served on 8000Now navigate tohttp://localhost:8000 with a modern internet browser.
Usehttp://localhost:8000?-i for getting a terminal with repland a sized down canvas (http://localhost:8000#debug also does the same )
For pygame-script go tohttp://localhost:8000/test.html( for a game folder named "test" with option --html )
V8 based browsers are preferred ( chromium/brave/chrome ... )starting with 81.0.4044 ( android 4.4 ).Because they set baseline restrictions on WebAssembly loading.Using them while testing ensure proper operation on all browsers
NOTES:
pygbag only provides support for pygame-ce ( pygame community edition )
safari/chrome mobile will not run until version ios 15.x. Regarding iOS: This project is tested with BrowserStack when possible.
first load will be slower, because setting up local cache from cdn to avoiduseless network transfer for getting pygame and cpython prebuilts.
each time there's a major change in the code/assets/templateyou must run
pygbag your.app.folderbutcache will not be destroyed to save bandwidth.if you want to reset prebuilts cache, remove the build/web-cache folder inyour.app.folder
pyodide wheels (non-standard wasm) aren't compatible ootb with pygbag runtime
HISTORY:
- pygbag's concepts took roots in a 2016 Panda3D community experiment.
BUILDING:
Pygbag is not only a python module and its python runtimes are stored online !Rebuilding all the toolchain can be quite hard.
https://github.com/pygame-web/python-wasm-sdk <= build CPython (not pyodide)
The default is to build only pygame, but feel free to fork and add yours.
So read/use pygbag CI to see how to build pygame + the C loader (pymain) andhow it is linked it to libpython.For modules loading since 0.6 the default is to use wasm dynamic libraries.wasm wheels info here
https://github.com/pygame-web/pygbag
Default prebuilts CPython + pygame-ce used by pygbag are stored via github pagesfrom the repohttps://github.com/pygame-web/archives under versioned folders.
TEST INTERACTIVE REPL 3.11 (default)
TEST INTERACTIVE REPL 3.12 (next)
ADDING STATIC/DYNAMIC MODULES:
see in package.d directory and use vendor/vendor.shSUPPORT FOR STATIC/DYNAMIC MODULES:
see in package.d/<vendor>/README.md for module <vendor> specific supportGENERIC PYGBAG SUPPORT OR PYGAME MODULE:
for generic help around pygbag
GENERIC CPYTHON WASM:
About
python and pygame wasm for everyone ( packager + test server + simulator )
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors8
Uh oh!
There was an error while loading.Please reload this page.