Thread: [PyOpenGL-Users] py2exe and pyopengl?
Brought to you by:
mcfletch
From: Craig B. <cd...@gm...> - 2010-02-16 07:27:32
|
I'm trying to use py2exe to package a python program which uses pyopengl. There's a lot of contradictory information on the web about how to accomplish this. Can anyone provide or point me to a definitive recipe for this using Python 2.6, the most recent py2exe, and PyOpenGL_accelerate-3.0.1b2-py2.6-win32 ? -- Craig Berry - http://www.cine.net/~cberry/ "Lots of things in the universe don’t solve any problems, and nevertheless exist." -- Sean Carroll |
From: Jef M. <jef...@gm...> - 2010-02-16 16:50:30
|
please check out my previous posting called "HOWTO freeze PyOpenGL programs with py2exe": http://sourceforge.net/mailarchive/message.php?msg_name=eb8474fe0911100101u9dd7d24ibd1c56f2b2c1599e%40mail.gmail.com hope this helps. On Mon, Feb 15, 2010 at 11:27 PM, Craig Berry <cd...@gm...> wrote: > I'm trying to use py2exe to package a python program which uses > pyopengl. There's a lot of contradictory information on the web about > how to accomplish this. Can anyone provide or point me to a > definitive recipe for this using Python 2.6, the most recent py2exe, > and PyOpenGL_accelerate-3.0.1b2-py2.6-win32 ? > > -- > Craig Berry - http://www.cine.net/~cberry/<http://www.cine.net/%7Ecberry/> > "Lots of things in the universe don’t solve any problems, and > nevertheless exist." -- Sean Carroll > > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > _______________________________________________ > PyOpenGL Homepage > http://pyopengl.sourceforge.net > _______________________________________________ > PyOpenGL-Users mailing list > PyO...@li... > https://lists.sourceforge.net/lists/listinfo/pyopengl-users > |
From: Dan H. <Dan...@no...> - 2010-02-16 18:28:10
|
Jef Mangelschots wrote: > please check out my previous posting called "HOWTO freeze PyOpenGL > programs with py2exe": > http://sourceforge.net/mailarchive/message.php?msg_name=eb8474fe0911100101u9dd7d24ibd1c56f2b2c1599e%40mail.gmail.com > hope this helps. One further variation of Jef's instructions: You can programmatically copy the OpenGL directory to "dist" via your setup.py so that you don't have to copy it manually each time. Here's an example using shutil.copytree(): # Since the ignore keyword was introduced in Python 2.6, include a # fall-back for Python 2.5. try: shutil.copytree( opengl_dir, os.path.join( "dist", "OpenGL" ), ignore = shutil.ignore_patterns( "*.py", "*.pyc", "GLUT", "Tk" ), ) except TypeError: shutil.copytree( opengl_dir, os.path.join( "dist", "OpenGL" ) ) This is from: http://bitbucket.org/dhelfman/maproom/src/tip/setup.py#cl-190 I didn't say it was pretty. :) Dan |
From: Craig B. <cd...@gm...> - 2010-02-16 19:28:07
|
Thanks, Jef and Dan. I'm a bit perturbed that this is so messy; it has the smell of something that will break every time the slightest change happens to any of the involved components. I'm wondering whether Python is really suited to production OpenGL use, which is sad, as I've really been enjoying working in it. On Tue, Feb 16, 2010 at 10:27, Dan Helfman <Dan...@no...> wrote: > Jef Mangelschots wrote: >> please check out my previous posting called "HOWTO freeze PyOpenGL >> programs with py2exe": >> http://sourceforge.net/mailarchive/message.php?msg_name=eb8474fe0911100101u9dd7d24ibd1c56f2b2c1599e%40mail.gmail.com >> hope this helps. > > One further variation of Jef's instructions: You can programmatically > copy the OpenGL directory to "dist" via your setup.py so that you don't > have to copy it manually each time. Here's an example using > shutil.copytree(): > > > # Since the ignore keyword was introduced in Python 2.6, include a > # fall-back for Python 2.5. > try: > shutil.copytree( > opengl_dir, os.path.join( "dist", "OpenGL" ), > ignore = shutil.ignore_patterns( "*.py", "*.pyc", "GLUT", "Tk" ), > ) > except TypeError: > shutil.copytree( opengl_dir, os.path.join( "dist", "OpenGL" ) ) > > > This is from: > > http://bitbucket.org/dhelfman/maproom/src/tip/setup.py#cl-190 > > I didn't say it was pretty. :) > > Dan > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > _______________________________________________ > PyOpenGL Homepage > http://pyopengl.sourceforge.net > _______________________________________________ > PyOpenGL-Users mailing list > PyO...@li... > https://lists.sourceforge.net/lists/listinfo/pyopengl-users > -- Craig Berry - http://www.cine.net/~cberry/ "Lots of things in the universe don’t solve any problems, and nevertheless exist." -- Sean Carroll |
From: Dan H. <Dan...@no...> - 2010-02-16 19:35:04
|
Craig Berry wrote: > Thanks, Jef and Dan. I'm a bit perturbed that this is so messy; it > has the smell of something that will break every time the slightest > change happens to any of the involved components. I'm wondering > whether Python is really suited to production OpenGL use, which is > sad, as I've really been enjoying working in it. Honestly, I find the state of Python packaging (py2exe/py2app) pretty sad, regardless of whether you're using PyOpenGL. However if you can get past difficulties with the packaging, Python is really nice for production use.. Even for graphics software. Dan |
From: Craig B. <cd...@gm...> - 2010-02-17 03:40:35
|
Okay, neither of the provided recipe variants worked. I have this at the top of my main.py, the main module: import sys sys.path.insert(0, '.') import OpenGL.GL import OpenGL.GLU import OpenGL.GLUT from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import * And here is my setup.py: from distutils.core import setup import py2exe, os, sys setup(windows=['main.py'], options={"py2exe": {"includes": ["ctypes", "logging"], "excludes": ["OpenGL"], } } ) if sys.platform.startswith( "win" ) and "py2exe" in sys.argv: # See http://www.py2exe.org/index.cgi/PyOpenGL import OpenGL import shutil print "*** copy PyOpenGL module ***" opengl_dir = os.path.dirname( OpenGL.__file__ ) try: # Since the ignore keyword was introduced in Python 2.6, include a # fall-back for Python 2.5. try: shutil.copytree( opengl_dir, os.path.join( "dist", "OpenGL" ), ignore = shutil.ignore_patterns( "*.py", "*.pyc", "GLUT", "Tk" ) ) except TypeError: shutil.copytree( opengl_dir, os.path.join( "dist", "OpenGL" ) ) except WindowsError, error: if not "already exists" in str( error ): raise When I run "python setup.py py2exe", the output includes this: The following modules appear to be missing ['OpenGL.GL', 'OpenGL.GLU', 'OpenGL.GLUT'] ...which is confusing, as that's why I did the imports in main.py shown above. But anyway, the dist dir gets created, and the OpenGL package is copied into it as expected. But when I run dist\main.exe, I get an error popup pointing me at main.exe.log, which has these contents: Traceback (most recent call last): File "main.py", line 6, in <module> import OpenGL.platform.win32 ImportError: No module named OpenGL.platform.win32 Traceback (most recent call last): File "main.py", line 6, in <module> ImportError: No module named OpenGL.platform.win32 Traceback (most recent call last): File "main.py", line 6, in <module> import OpenGL.GL ImportError: No module named OpenGL.GL Traceback (most recent call last): File "main.py", line 6, in <module> ImportError: No module named OpenGL.GL Ideas, please? -- Craig Berry - http://www.cine.net/~cberry/ "Lots of things in the universe don’t solve any problems, and nevertheless exist." -- Sean Carroll |
From: Dan H. <Dan...@no...> - 2010-02-17 17:55:54
|
Craig Berry wrote: > Okay, neither of the provided recipe variants worked. > > I have this at the top of my main.py, the main module: > > import sys > sys.path.insert(0, '.') You might try something like this instead: # See http://www.py2exe.org/index.cgi/WhereAmI if hasattr( sys, "frozen" ): if sys.frozen == "windows_exe": main_dir = os.path.dirname( unicode( sys.executable, sys.getfilesystemencoding() ) ) sys.path.append( main_dir ) os.chdir( main_dir ) else: sys.path.insert( 0, "." ) Dan |
From: Craig B. <cd...@gm...> - 2010-02-17 18:16:18
|
Hm, seems like that would only make a difference if I were running main.exe from a dir other than dist, which I was not. I can try it out this evening, but I'm not optimistic. On Wed, Feb 17, 2010 at 09:55, Dan Helfman <Dan...@no...> wrote: > Craig Berry wrote: >> >> Okay, neither of the provided recipe variants worked. >> >> I have this at the top of my main.py, the main module: >> >> import sys >> sys.path.insert(0, '.') > > You might try something like this instead: > > # See http://www.py2exe.org/index.cgi/WhereAmI > if hasattr( sys, "frozen" ): > if sys.frozen == "windows_exe": > main_dir = os.path.dirname( > unicode( sys.executable, sys.getfilesystemencoding() ) > ) > sys.path.append( main_dir ) > os.chdir( main_dir ) > else: > sys.path.insert( 0, "." ) > > Dan > > -- Craig Berry - http://www.cine.net/~cberry/ "Lots of things in the universe don’t solve any problems, and nevertheless exist." -- Sean Carroll |