主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PyOpenGL-3.0.1のサンプルを走らせるまで exceptions.ValueError: numpy.dtype does not appear to be the correct type object

                
OpenGLを使いたくてpython2.6にPyOpenGLを入れた。

サンプルを走らせようとすると、やっぱりというか、エラーが出てすんなり動いてくれることはなかった。なのでサンプルを走らせるためにしたことメモ。

環境:xp sp3,CeleronD

僕が最初に試してみたサンプルは"PyOpenGL-Demo-3.0.1b1\PyOpenGL-Demo\GLUT\gears.py"
そんでエラーは以下
******************
Message File Name Line Position
Traceback
C:\Documents and Settings\camus\デスクトップ\PyOpenGL-Demo-3.0.1b1\PyOpenGL-Demo\da\dots.py 24
C:\Python26\lib\site-packages\OpenGL\GL\__init__.py 2
C:\Python26\lib\site-packages\OpenGL\raw\GL\__init__.py 6
C:\Python26\lib\site-packages\OpenGL\raw\GL\constants.py 7
C:\Python26\lib\site-packages\OpenGL\arrays\__init__.py 22
loadAll C:\Python26\lib\site-packages\OpenGL\arrays\formathandler.py 37
loadPlugin C:\Python26\lib\site-packages\OpenGL\arrays\formathandler.py 44
load C:\Python26\lib\site-packages\OpenGL\plugins.py 14
importByName C:\Python26\lib\site-packages\OpenGL\plugins.py 28
C:\Python26\lib\site-packages\OpenGL\arrays\numpymodule.py 25
OpenGL_accelerate.numpy_formathandler (src\numpy_formathandler.c:3543) numpy.pxd 30
exceptions.ValueError: numpy.dtype does not appear to be the correct type object
******************

解決法1
僕はPyscripterを使っているのだけど、そこでサンプルスクリプトを開いて実行すると上のエラーが出る。エラーが出ても構わずもう一回実行すると正常に走った。どうやら変数の初期化で何かエラー原因があるらしい。

解決法2
上記の方法で走ると言ったら走る。しかしそのうちにpy2exeで実行形式にしたときは、エラーを吐きだされたけど変数そのままでもう一回実行なんてできない。なのでエラー原因を取り除こう。
まずエラーを吐きだしていると思われるスクリプトを探す。エラーでなるべく下の方に出ているpythonスクリプトを開く。今回は"C:\Python26\lib\site-packages\OpenGL\arrays\numpymodule.py"で、該当するのは25行目。どうやらtryの部分が例外を吐きだしてエラーになっているらしい。このtry文の役目を考える。どうやら"NumpyHandler"という変数を扱っている。少し視野を広げると、22行目から29行目までのif文が"NumpyHandler"という変数をどういう値にするかを司っているのがわかる。しかし22行目で"NumpyHandler"に"None"を入れていて、30行目を見れば"if NumpyHandler is None:"とある。これは"NumpyHandler"が"None"でもスクリプト実行が進むということであり、23行目から29行目のtry-except分による"NumpyHandler"の再定義がなくても実行できるということだ。
なので23行目から29行目までコメントアウトしてサンプル"gears.py"を実行してみたところ、問題なく動作した。

解決法3(最後)
コメントアウトしたことによって、"OpenGL_accelerate.numpy_formathandler"というモジュールのインポートを妨げている。名前から想像すると、なんだかOpenGLのレンダリングを高速化してくれそうな名前である。なのでできることならコメントアウトせずにインポートしたい。試しにエラーを吐きだしている"from OpenGL_accelerate.numpy_formathandler import NumpyHandler"というスクリプトをインタープリタで実行してみたが、やっぱりエラーを吐いた。でも解決法1では、サンプルスクリプトを2回実行したらエラーははかなった。
…じゃあ"from OpenGL_accelerate.numpy_formathandler import NumpyHandler"をもう一回実行してみたら。
エラーを吐かずにインポートが実行された。たぶん元になっているスクリプトの初期化方法がおかしいんだろう。
でもこれぐらいなら今開いている"numpymodule.py"をいじればエラー中断を回避してインポートができる。
"from OpenGL_accelerate.numpy_formathandler import NumpyHandler"を実行してエラーが返されても再度、"from OpenGL_accelerate.numpy_formathandler import NumpyHandler"を実行するように書き換えた。そんでまたサンプル"gears.py"を実行した。正常動作した。

gears101118
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。