wxPython和pyOpenGL在用PyInstaller打包时遇到的若干问题及解决办法

时间:2022-04-06 06:20:45

尝试用PyInstaller打包Python代码(使用了wxPython和pyOpenGL)的时候,遇到一系列的问题,汇总一下:


环境:

Win7 64-bit, PyInstaller 2.0, Python 2.7.5, wxPython 2.8.12.1, pyOpenGL 3.0.2


问题1:

      PyInstaller打包成功,运行dist里生成的exe文件时,提示下面错误:

      "... OpenGL.GLUT.special", line 322,  in glutInit

      TypeError: 'NoneType' object is not callable

原因:

    pyOpenGL相关的DLL文件没有自动copy到exe所在的目录

解决办法:

    把pyOpenGL的DLL文件 (通常在Lib\site-packages\OpenGL\DLLS下面), copy到exe所在目录


问题2:

     PyInstaller打包成功,运行dist里生成的exe文件时,提示下面错误: 

    File "...OpenGL.arrays.vbo", line 430, in <module>
    AttributeError: 'module' object has no attribute 'GL_READ_WRITE'

原因:

     pyInstaller 2.0 不能直接支持 pyOpenGL 3.0.1和pyOpenGL3.0.2

解决办法:

     使用pyOpelGL 3.0.1b

     http://sourceforge.net/projects/pyopengl/files/PyOpenGL/3.0.1b1/

     参考: http://*.com/questions/11011373/pyopengl-exe-made-with-pyinstaller-gives-attributeerror


问题3:

    PyInstaller打包成功,运行dist里生成的exe文件时,提示下面错误:  

    ImportError: cannot import name Publisher

原因:

    wxPython中包含pubsub多个不同的版本(所谓的v1和v3), wxPython如果使用v1版本实现的publisher, PyInstaller不能正常工作。

解决办法:

   1. 保留v1版本的pubsub, 使用hook (参考http://www.pyinstaller.org/ticket/312)。 这个方法我没有试过。

   2. 使用v3版本的pubsub。

      参考: http://wiki.wxpython.org/WxLibPubSub#PubSub_within_wx.lib