Pygame and PyInstaller

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Pygame and PyInstaller

Vincent Le Goff
Hello,


I'm a new user of PyInstaller and appreciate its simplicity.  I have,
however, noticed a problem when using pygame.


pygame is an interesting Python library to create games.  It handles
basic operations (like a simple 2D window, sound output, keyboard
processing and so on).  When trying to make an executable out of a game
using pygame, everything seems to work... but things break when pygame
attempts to load its fonts.  Here's the end of the traceback I receive
on calling pygame.font.Font (this is in the executable, not the original
Python script):


   File "site-packages\pygame\pkgdata.py", line 50, in getResource
   File "site-packages\pkg_resources\__init__.py", line 1134, in
resource_exists
   File "site-packages\pkg_resources\__init__.py", line 1404, in
has_resource
   File "site-packages\pkg_resources\__init__.py", line 1464, in _has
NotImplementedError: Can't perform this operation for unregistered
loader type


(I am running the pyinstaller script in a virtualenv, which might also
play a role.)


4The problem doesn't seem to come from pygame directly.  I only have the
slightest idea of what pkg_resources actually does.  Does it sound
familiar to you?  And how to fix it?


Thanks for your help,


Vincent

--
You received this message because you are subscribed to the Google Groups "PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/pyinstaller.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/4e5a8c6f-c93e-e712-2583-b0da68332a2a%40gmail.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Pygame and PyInstaller

Raoul Snyman
Hi Vincent,

I was just browsing the PyInstaller documentation the other day
looking for something unrelated, but I came across this question in
the FAQ:

What about pkg_resources?
pkg_resources is currently not supported by PyInstaller. This means
that an application using a library which uses the the pkg_resources
API will probably not work out of the box. The only situation in which
it works is when it's being used on .egg files (see above). For
details follow issue #183.

See https://github.com/pyinstaller/pyinstaller/wiki/FAQ

It may be that PyGame is trying to load something via pkg_resources?

I'm sorry I can't be of more help, I'm not very familiar with pygame
or pkg_resources.


On Thu, Jun 20, 2019 at 8:42 AM Vincent Le Goff
<[hidden email]> wrote:

>
> Hello,
>
>
> I'm a new user of PyInstaller and appreciate its simplicity.  I have,
> however, noticed a problem when using pygame.
>
>
> pygame is an interesting Python library to create games.  It handles
> basic operations (like a simple 2D window, sound output, keyboard
> processing and so on).  When trying to make an executable out of a game
> using pygame, everything seems to work... but things break when pygame
> attempts to load its fonts.  Here's the end of the traceback I receive
> on calling pygame.font.Font (this is in the executable, not the original
> Python script):
>
>
>    File "site-packages\pygame\pkgdata.py", line 50, in getResource
>    File "site-packages\pkg_resources\__init__.py", line 1134, in
> resource_exists
>    File "site-packages\pkg_resources\__init__.py", line 1404, in
> has_resource
>    File "site-packages\pkg_resources\__init__.py", line 1464, in _has
> NotImplementedError: Can't perform this operation for unregistered
> loader type
>
>
> (I am running the pyinstaller script in a virtualenv, which might also
> play a role.)
>
>
> 4The problem doesn't seem to come from pygame directly.  I only have the
> slightest idea of what pkg_resources actually does.  Does it sound
> familiar to you?  And how to fix it?
>
>
> Thanks for your help,
>
>
> Vincent
>
> --
> You received this message because you are subscribed to the Google Groups "PyInstaller" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
> To post to this group, send email to [hidden email].
> Visit this group at https://groups.google.com/group/pyinstaller.
> To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/4e5a8c6f-c93e-e712-2583-b0da68332a2a%40gmail.com.
> For more options, visit https://groups.google.com/d/optout.



--
Raoul Snyman
B.Tech Information Technology (Software Engineering)
E-Mail:   [hidden email]
Web:      http://www.saturnlaboratories.co.za/
Blog:      http://blog.saturnlaboratories.co.za/
Mobile:   082 550 3754
Registered Linux User #333298 (http://counter.li.org)

--
You received this message because you are subscribed to the Google Groups "PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/pyinstaller.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/CAJvrXn%2BCfcokRQp4yTh5%3Dc7t7%3DniRy%2BPavoQhk5cR%3D_5YZOz8g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Pygame and PyInstaller

Vincent Le Goff
Thank you, it was most helpful.  Unfortunately, the linked issue is
closed and doesn't seem to have as much connection to the problem as I'd
like (or an open issue on the PyInstaller tracker itself).  I'm
wondering if this will be "fixed", in any way, or if we should live with
it.  In my case, the reason why pkg_resources is needed is to load fonts
(a .tif file if I'm not mistaken) so pygame cannot find it and
PyInstaller probably doesn't.  But perhaps there's a way around it, to
include the .tif file somewhere else in a data file... I'll look into that.


In any case, thank you for the answer, I have a better idea of what's
going on.


Vincent

On 6/21/2019 2:36 AM, Raoul Snyman wrote:

> Hi Vincent,
>
> I was just browsing the PyInstaller documentation the other day
> looking for something unrelated, but I came across this question in
> the FAQ:
>
> What about pkg_resources?
> pkg_resources is currently not supported by PyInstaller. This means
> that an application using a library which uses the the pkg_resources
> API will probably not work out of the box. The only situation in which
> it works is when it's being used on .egg files (see above). For
> details follow issue #183.
>
> See https://github.com/pyinstaller/pyinstaller/wiki/FAQ
>
> It may be that PyGame is trying to load something via pkg_resources?
>
> I'm sorry I can't be of more help, I'm not very familiar with pygame
> or pkg_resources.
>
>
> On Thu, Jun 20, 2019 at 8:42 AM Vincent Le Goff
> <[hidden email]> wrote:
>> Hello,
>>
>>
>> I'm a new user of PyInstaller and appreciate its simplicity.  I have,
>> however, noticed a problem when using pygame.
>>
>>
>> pygame is an interesting Python library to create games.  It handles
>> basic operations (like a simple 2D window, sound output, keyboard
>> processing and so on).  When trying to make an executable out of a game
>> using pygame, everything seems to work... but things break when pygame
>> attempts to load its fonts.  Here's the end of the traceback I receive
>> on calling pygame.font.Font (this is in the executable, not the original
>> Python script):
>>
>>
>>     File "site-packages\pygame\pkgdata.py", line 50, in getResource
>>     File "site-packages\pkg_resources\__init__.py", line 1134, in
>> resource_exists
>>     File "site-packages\pkg_resources\__init__.py", line 1404, in
>> has_resource
>>     File "site-packages\pkg_resources\__init__.py", line 1464, in _has
>> NotImplementedError: Can't perform this operation for unregistered
>> loader type
>>
>>
>> (I am running the pyinstaller script in a virtualenv, which might also
>> play a role.)
>>
>>
>> 4The problem doesn't seem to come from pygame directly.  I only have the
>> slightest idea of what pkg_resources actually does.  Does it sound
>> familiar to you?  And how to fix it?
>>
>>
>> Thanks for your help,
>>
>>
>> Vincent
>>
>> --
>> You received this message because you are subscribed to the Google Groups "PyInstaller" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
>> To post to this group, send email to [hidden email].
>> Visit this group at https://groups.google.com/group/pyinstaller.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/4e5a8c6f-c93e-e712-2583-b0da68332a2a%40gmail.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>

--
You received this message because you are subscribed to the Google Groups "PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/pyinstaller.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/d29b6374-008c-a5d5-dfe5-944df7bfbb00%40gmail.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Pygame and PyInstaller

Vincent Le Goff
In reply to this post by Raoul Snyman
Okay, here's my temporary fix:

1. Add a default font file in your game.  My choice is the
'freesansbold.ttf' as this one does seem standard and is included in
Pygame (you'll find it in its source code, if nothing else, or
site-packages/pygame/freesansbold.ttf).
2. Add a few line before creating the font.

import sys

if getattr(sys, "frozen"): # FROZEN executable
     font_family = "./freesansbold.ttf" # Hard-code a local path
else:
     font_family = pygame.font.match_font(font_family)
self.font_object = pygame.font.Font(font_family, font_size)

So we give it the local filename if the executable is frozen. Copy the
freesansbold.ttf next to the final executable and try it.  It should
work.  Wrap the data file is you like to do so, it all should work. 
This is, however, a temporary fix, it would be great to have
pkg_resources working, but one step at a time.

Cheers,

Vincent
On 6/21/2019 2:36 AM, Raoul Snyman wrote:

> Hi Vincent,
>
> I was just browsing the PyInstaller documentation the other day
> looking for something unrelated, but I came across this question in
> the FAQ:
>
> What about pkg_resources?
> pkg_resources is currently not supported by PyInstaller. This means
> that an application using a library which uses the the pkg_resources
> API will probably not work out of the box. The only situation in which
> it works is when it's being used on .egg files (see above). For
> details follow issue #183.
>
> See https://github.com/pyinstaller/pyinstaller/wiki/FAQ
>
> It may be that PyGame is trying to load something via pkg_resources?
>
> I'm sorry I can't be of more help, I'm not very familiar with pygame
> or pkg_resources.
>
>
> On Thu, Jun 20, 2019 at 8:42 AM Vincent Le Goff
> <[hidden email]> wrote:
>> Hello,
>>
>>
>> I'm a new user of PyInstaller and appreciate its simplicity.  I have,
>> however, noticed a problem when using pygame.
>>
>>
>> pygame is an interesting Python library to create games.  It handles
>> basic operations (like a simple 2D window, sound output, keyboard
>> processing and so on).  When trying to make an executable out of a game
>> using pygame, everything seems to work... but things break when pygame
>> attempts to load its fonts.  Here's the end of the traceback I receive
>> on calling pygame.font.Font (this is in the executable, not the original
>> Python script):
>>
>>
>>     File "site-packages\pygame\pkgdata.py", line 50, in getResource
>>     File "site-packages\pkg_resources\__init__.py", line 1134, in
>> resource_exists
>>     File "site-packages\pkg_resources\__init__.py", line 1404, in
>> has_resource
>>     File "site-packages\pkg_resources\__init__.py", line 1464, in _has
>> NotImplementedError: Can't perform this operation for unregistered
>> loader type
>>
>>
>> (I am running the pyinstaller script in a virtualenv, which might also
>> play a role.)
>>
>>
>> 4The problem doesn't seem to come from pygame directly.  I only have the
>> slightest idea of what pkg_resources actually does.  Does it sound
>> familiar to you?  And how to fix it?
>>
>>
>> Thanks for your help,
>>
>>
>> Vincent
>>
>> --
>> You received this message because you are subscribed to the Google Groups "PyInstaller" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
>> To post to this group, send email to [hidden email].
>> Visit this group at https://groups.google.com/group/pyinstaller.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/4e5a8c6f-c93e-e712-2583-b0da68332a2a%40gmail.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>

--
You received this message because you are subscribed to the Google Groups "PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/pyinstaller.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/7173b323-6ef7-39a3-b2fa-316a3b9722de%40gmail.com.
For more options, visit https://groups.google.com/d/optout.