py2exeがうまくいかないしよくわからなかった。
昨日インストールしたpyOpenGLでは
C:\Python26\Lib\site-packages配下にOpenGLフォルダが
無かった(py2exeするのにOpenGLフォルダの中のファイルをコピーする必要がありそうだし、昨日のインストールではOpenGLフォルダがどこにあるかわからなかった)ので
ココを参考に再度pyOpenGLを入れてみることにした。
サイト内に書かれているsetuptoolsについては昨日も書いた通り
すでに入っているので飛ばした。
ページ内のリンクからPyOpenGL-3.0を入手した。
zipだったので展開して展開したフォルダの中に移動して
python setup.py install
を実行した。
C:\Python26\Lib\site-packages配下にOpenGLフォルダができた。
py2exeで実行ファイルを作るのはココを参考にした。
実際の作業は以下の通り。
OpenGLを使ったソースファイル↓
sample3.py
-------------------------------
import sys
sys.path.insert( 0, '.' )
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
import sys
ESCAPE = '\033'
lastx = x = 30
lasty = y = 30
def initialize():
glClearDepth(1.0)
glEnable(GL_DEPTH_TEST)
glClearColor(0.0, 0.5, 0.0, 0.0)
glShadeModel(GL_SMOOTH)
glMatrixMode(GL_PROJECTION)
glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)
glMatrixMode(GL_MODELVIEW)
glTranslatef(0.0, 0.0, -2.0)
glRotatef(y, 1.0, 0.0, 0.0)
glRotatef(x, 0.0, 1.0, 0.0)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE)
glEnable(GL_COLOR_MATERIAL)
def mouseMotion(x, y):
global lastx, lasty
lastx = x
lasty = y
glutPostRedisplay()
def display():
global lastx, lasty
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
glPushMatrix()
glRotatef(lastx, 0.0, 1.0, 0.0)
glRotatef(lasty, 1.0, 0.0, 0.0)
glBegin(GL_QUADS)
glNormal3f( 0.0, 0.0, 1.0)
glVertex3f( 0.5, 0.5, 0.5)
glVertex3f(-0.5, 0.5, 0.5)
glVertex3f(-0.5,-0.5, 0.5)
glVertex3f( 0.5,-0.5, 0.5)
glNormal3f( 0.0, 0.0,-1.0)
glVertex3f(-0.5,-0.5,-0.5)
glVertex3f(-0.5, 0.5,-0.5)
glVertex3f( 0.5, 0.5,-0.5)
glVertex3f( 0.5,-0.5,-0.5)
glNormal3f( 0.0, 1.0, 0.0)
glVertex3f( 0.5, 0.5, 0.5)
glVertex3f( 0.5, 0.5,-0.5)
glVertex3f(-0.5, 0.5,-0.5)
glVertex3f(-0.5, 0.5, 0.5)
glNormal3f( 0.0,-1.0, 0.0)
glVertex3f(-0.5,-0.5,-0.5)
glVertex3f( 0.5,-0.5,-0.5)
glVertex3f( 0.5,-0.5, 0.5)
glVertex3f(-0.5,-0.5, 0.5)
glNormal3f( 1.0, 0.0, 0.0)
glVertex3f( 0.5, 0.5, 0.5)
glVertex3f( 0.5,-0.5, 0.5)
glVertex3f( 0.5,-0.5,-0.5)
glVertex3f( 0.5, 0.5,-0.5)
glNormal3f(-1.0, 0.0, 0.0)
glVertex3f(-0.5,-0.5,-0.5)
glVertex3f(-0.5,-0.5, 0.5)
glVertex3f(-0.5, 0.5, 0.5)
glVertex3f(-0.5, 0.5,-0.5)
glEnd()
glPopMatrix()
glutSwapBuffers()
def keyboard(*args):
if args[0] == ESCAPE:
sys.exit()
def reshape(w, h):
glViewport(0, 0, w, h)
def main():
glutInit(sys.argv)
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH )
glutInitWindowPosition( 100, 100 )
glutInitWindowSize( 500, 400 )
glutCreateWindow( sys.argv[0] )
glutDisplayFunc( display )
glutKeyboardFunc( keyboard )
glutReshapeFunc( reshape )
glutMotionFunc( mouseMotion )
initialize()
glutMainLoop()
print "Hit ESC key to quit."
main()
-------------------------------
py2exeで使用するsetup.pyは下記の通り。
----------------------------------
from distutils.core import setup
import py2exe
setup(windows=["sample3.py"],
options={"py2exe": {"includes": ["ctypes", "logging"],
"excludes": ["OpenGL"],
}
}
)
----------------------------------
実行はpython setup.py py2exe
下記のフォルダをpy2exeで作成されたdistフォルダにコピー
C:\Python26\Lib\site-packages\OpenGL
C:\Python26\Lib\ctypes
下記のフォルダ内のファイルのみ(Libフォルダ内のフォルダはいらない)も
distフォルダにコピー
C:\Python26\Lib
上記を毎回やるのは面倒なのでバッチファイルを作成して行う。
バッチファイルは下記の通り。
---------------------------------
rmdir /s build
rmdir /s dist
python setup.py py2exe
mkdir .\dist\OpenGL
xcopy C:\Python26\Lib\site-packages\OpenGL .\dist\OpenGL /e
mkdir .\dist\ctypes
xcopy C:\Python26\Lib\ctypes .\dist\ctypes /e
copy C:\Python26\Lib .\dist
pause
---------------------------------
作成されたdistファイルを他のマシン(windowsXP32bit)に持って行っても
動いた。