Hi there
1.) For one of my last projects I have been toying around with pygame
initialization. Instead of using pygame.init() and let it initialize
everything I went through the trouble to initialize every module. Of
course I didn't want to do it manually so I wrote some code to do it for
me. It worked, but I found it to be inconsistent that certain modules
have an init() method but no get_init(). I would have expected that
every module that has an init() method also should have an get_init().
To have only the init() method does not make much sense to me. Maybe
this could go into the next refactor version of pygame.
I have attached an snippet from my log indicating in which modules the
get_init() method is missing, see first paragraph in attached
'pygame_init_errors.txt' [1].
2.) I also found that a few modules that have an init() method raised an
error (see second paragraph in attached log). Not sure if this is due to
the way I initialize the modules or it is because pygame was not
compiled with that support. Or my platform/hardware does not support those.
The code generating the log can be found in the attached
'context_init_pygame.py' [2].
3.) While writing this initialization code I started to wonder if I
should log the capabilities of the system it was running on. And that
would be my next question: I think it would help diagnose problems if
there were some sort of capabilities script that reads the
system/hardware and collects information about it. Maybe it could later
be uploaded to pygame.org (or somewhere else) anonymously for further
analysis. Initialization and capabilities are not the same but I'm
unsure if would make sense in case the initialization would fail to log
the capabilities. But then it should probably collect a bit more info
than only the display modes, mixer configurations and success full
pygame modules initialization (you probably want to know about the OS
and its version, hardware, etc). But then I'm pretty sure there are
already other tools doing that.
4.) Another thing I noticed in the docs is that certain modules should
(like scrap) or can (like mixer) be initialized after the display
module. Not sure how scrap it initialized when using pygame.init() since
this would be before scrap (maybe scrap has to be initialized
separately? I haven't tried.). This give me the idea to write a
PygameInitializer class (see attached 'pygame_initializer.py' [3] which
is a proof of concept) that is a context manager. So in code it would
look like this:
---- code ----
def main():
logger.info("before pygame init")
with PygameInitializer(env_settings=(('SDL_VIDEO_CENTERED', '1'),))as pio:
pio.mixer_frequency =1 pio.mixer_size =1 pio.mixer_channels =1
pio.mixer_buffer_size =16 screen = pygame.display.set_mode((800, 600),
pygame.DOUBLEBUF, 32)
logger.info("set display set mode")
# your application code here logger.info("application run!")
---- end code ----
But then I wondered if it is really worth going through all this if
there is pygame.init().
[1] log: https://bpaste.net/show/53dccc5bd3cf
---- log snippet ----
#### modules with missing get_init() method but has a init() method ->
no consistency for modules that have an init() method!! ####
2566 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame._freetype' from
'...\\python360\\lib\\site-packages\\pygame\\_freetype.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
2567 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame._freetype' from
'...\\python360\\lib\\site-packages\\pygame\\_freetype.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
2567 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame._freetype' from
'...\\python360\\lib\\site-packages\\pygame\\_freetype.cp36-win_amd64.pyd'>:
module 'pygame._freetype' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(267)]
2569 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.base' from
'...\\python360\\lib\\site-packages\\pygame\\base.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
2569 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.base' from
'...\\python360\\lib\\site-packages\\pygame\\base.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
3177 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame.base' from
'...\\python360\\lib\\site-packages\\pygame\\base.cp36-win_amd64.pyd'>:
module 'pygame.base' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(267)]
3198 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.fastevent' from
'...\\python360\\lib\\site-packages\\pygame\\fastevent.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
3199 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.fastevent' from
'...\\python360\\lib\\site-packages\\pygame\\fastevent.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
3200 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame.fastevent' from
'...\\python360\\lib\\site-packages\\pygame\\fastevent.cp36-win_amd64.pyd'>:
module 'pygame.fastevent' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(267)]
3204 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.freetype' from
'...\\python360\\lib\\site-packages\\pygame\\freetype.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
3204 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.freetype' from
'...\\python360\\lib\\site-packages\\pygame\\freetype.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
3205 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame.freetype' from
'...\\python360\\lib\\site-packages\\pygame\\freetype.py'>: module
'pygame.freetype' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(267)]
3219 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.midi' from
'...\\python360\\lib\\site-packages\\pygame\\midi.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
3219 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.midi' from
'...\\python360\\lib\\site-packages\\pygame\\midi.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
3222 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame.midi' from
'...\\python360\\lib\\site-packages\\pygame\\midi.py'>: module
'pygame.midi' has no attribute 'get_init' [gamelib.context_init_pygame:
_init_module in context_init_pygame.py(267)]
533054 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.scrap' from
'...\\python360\\lib\\site-packages\\pygame\\scrap.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
533057 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.scrap' from
'...\\python360\\lib\\site-packages\\pygame\\scrap.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
533060 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame.scrap' from
'...\\python360\\lib\\site-packages\\pygame\\scrap.cp36-win_amd64.pyd'>:
module 'pygame.scrap' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(267)]
#### modules throwing error on init() on my machine probably due to
missing hardware or missing code at compile time (?) ####
2560 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame._camera_vidcapture' from
'...\\python360\\lib\\site-packages\\pygame\\_camera_vidcapture.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
2561 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame._camera_vidcapture' from
'...\\python360\\lib\\site-packages\\pygame\\_camera_vidcapture.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
2565 [MainProcess 15488 MainThread 9212]: ERROR init() raised an
exceptions: No module named 'VideoCapture' [gamelib.context_init_pygame:
_init_module in context_init_pygame.py(269)]
3179 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.camera' from
'...\\python360\\lib\\site-packages\\pygame\\camera.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(258)]
3179 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.camera' from
'...\\python360\\lib\\site-packages\\pygame\\camera.py'>
[gamelib.context_init_pygame: _init_module in context_init_pygame.py(259)]
3182 [MainProcess 15488 MainThread 9212]: ERROR init() raised an
exceptions: cannot import name '_camera' [gamelib.context_init_pygame:
_init_module in context_init_pygame.py(269)]
---- end log snippet ----
[2] context_init_pygame.py: https://bpaste.net/show/937b80cb07f9
[3] pygame_initializer.py: https://bpaste.net/show/ee88d45ea10a
~DR0ID