[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] pygame initialization



Hi,

1)
- "all modules without a get_init() should have one if they have a .init()"
https://github.com/pygame/pygame/issues/616

3) yeah, there are tools that catch bugs with apps and log them for you.

cheers,

On Thu, Nov 8, 2018 at 8:15 PM DR0ID <dr0id@xxxxxxxxxx> wrote:
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().





---- 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