As of PyOpenGL 3.0, add the following to any of your python files to get py2exe to work.

{{{
from ctypes import util
try:
    from OpenGL.platform import win32
except AttributeError:
    pass
}}}

The following was not necessary for me.



[[http://pyopengl.sourceforge.net/|PyOpenGL]] is a set of Python bindings for the OpenGL graphical rendering library. It has [[http://pyopengl.sourceforge.net/documentation/py2exe.html|a page on how to compile with py2exe]], but it is outdated. Here's how I made it work for me, although it is quite wasteful in space.

 * In your `setup.py`, exclude `OpenGL` although you have PyOpenGL installed. I needed to explicitly include `ctypes` and `logging` to make it work, but maybe that depends on what things you use. My `setup.py`:
 {{{
from distutils.core import setup
import py2exe

setup(windows=['opdracht.py'],
      options={
          "py2exe": {
              "includes": ["ctypes", "logging"],
              "excludes": ["OpenGL"],
              }
          }
      )
}}}
 * At the top of your main Python file, add the current directory (`'.'`) to your `sys.path`:
 {{{
import sys
sys.path += ['.']
}}}
 * Run {{{setup.py py2exe}}}.
 * Copy the `OpenGL` folder from PYTHONDIR`\Lib\site-packages` to your new `dist\` directory. I think it's in `C:\Python26\Lib\site-packages` by default. You can leave out any *.pyc and *.pyo files.

I think that's what did the trick for me, now . If you need funky stuff like TK, WGL, or OpenGLContext, maybe [[http://pyopengl.sourceforge.net/documentation/py2exe.html|the original tutorial by PyOpenGL]] helps.

Tested with Python 2.6, py2exe version 0.6.9 and PyOpenGL version 3.0.0.

--- [[mailto:bgeron@gmail.com|Bram Geron]]