2017/04/22(土) [n年前の日記]
#1 [python] pygame_sdl2について調べてるけど
_pygame_sdl2
について調べてるけど、さっぱり分からんなと…。Windows上にインストールする方法すら分からない…。ちなみに手元の環境は Windows10 x64 + Python 2.7.13 32bit版。
_http://nightly.renpy.org/pygame_sdl2/ に「Nightly builds が置いてあるよ」と書かれてるけど、404で。
_Index of /pygame_sdl2/current/ (Internet Archive) には2016/07/09版のリストがあったけど、.whlファイルそのものは残ってない模様。残念。
_Lemma Soft Forums - View topic - Can't install pygame_SDL2 によると、「Ren'PyのSDKを落とせば中に pygame_sdl2 も入ってる」と書いてあるような…。
_Ren'Py 6.99.12 からSDKのzipをDLして中を覗いてみたけど、たしかに SDL2.dll だの pygame_sdl2 なるフォルダが入ってる、が、前述のやり取りでは「ソレを取り出したけどやっぱり動かないんですけど」みたいなことが書かれてるようでもあり。
ビルドとやらをするしかないのかな…。ハードル高いな…。こんなんじゃ「たーのしー!」とか全然言えないよな…。
_http://nightly.renpy.org/pygame_sdl2/ に「Nightly builds が置いてあるよ」と書かれてるけど、404で。
_Index of /pygame_sdl2/current/ (Internet Archive) には2016/07/09版のリストがあったけど、.whlファイルそのものは残ってない模様。残念。
_Lemma Soft Forums - View topic - Can't install pygame_SDL2 によると、「Ren'PyのSDKを落とせば中に pygame_sdl2 も入ってる」と書いてあるような…。
_Ren'Py 6.99.12 からSDKのzipをDLして中を覗いてみたけど、たしかに SDL2.dll だの pygame_sdl2 なるフォルダが入ってる、が、前述のやり取りでは「ソレを取り出したけどやっぱり動かないんですけど」みたいなことが書かれてるようでもあり。
ビルドとやらをするしかないのかな…。ハードル高いな…。こんなんじゃ「たーのしー!」とか全然言えないよな…。
◎ ビルド云々について調べる。 :
_renpy/pygame_sdl2_windeps: Windows dependencies for pygame_sdl2.
に、pygame_sdl2 をWindows上でビルドする際に必要になるファイル群があるよ、てな話も見かけた。ていうか pygame_sdl2 の README.md に書いてあるな…。一覧を眺めると、
_pygame_sdl2_windeps/lib/x86
のあたりに SDL2.dll や SDL2_image.dll が入ってるようで。
ビルドするには、使ってるPythonのバージョンと合ってる Visual Studio が必要、とも書いてある…。
自分が使ってるのは Python 2.7 だけど…。 _WindowsCompilers - Python Wiki を眺めた感じでは、
むむ? よく見たら、 _Microsoft Visual C++ Compiler for Python 2.7 てのが用意されてるのか。Python用のアレコレをビルドするための環境がMicrosoftのサイトから正式に入手できるとは…。嘘だろ。マジかよ。Microsoft、やるなあ。 _Windows での Python 2.7, 3.4, 3.5 の拡張モジュールビルド環境 - Qiita によると去年から用意してくれたらしい。Microsoft、凄いぞ。素晴らしい。いや、ちょっとコレ、 _ヤンキー効果 が入ってる気もするけど…。でも、スゴイ。Microsoft、グッジョブ。
とりあえず Visual C++ Compiler for Python 2.7 を Windows10上でインストール。スタートメニューに「Microsoft Visual C++ Compiler Package for Python 2.7」というフォルダが出来て、ショートカットが登録された。「Visual C++ 2008 32-bit Command Prompt」を実行。DOS窓が開いた。
とりあえず、この Visual C++ のコンパイラを使いたい時は、「Visual C++ 2008 *-bit Command Prompt」を実行してDOS窓開いてそこで作業すべし、ということらしい。
_Microsoft Visual C++ Compiler for Python 2.7はひとのためならず | site-hhs を参考に、 _lru-dict とやらをビルドすることで動作確認。lru-dict-1.1.6.tar.gz をDLして解凍して中に入って python setup.py build と打ったら、buildというフォルダが作られて中に色々なファイルが作られた。どうやらちゃんと使えそうな予感。
ビルドするには、使ってるPythonのバージョンと合ってる Visual Studio が必要、とも書いてある…。
自分が使ってるのは Python 2.7 だけど…。 _WindowsCompilers - Python Wiki を眺めた感じでは、
- Python 2.6 〜 3.2 までは Visual C++ 9.0。
- Python 3.3 と 3.4 は Visual C++ 10.0。
- Python 3.5 と 3.6 は Visual C++ 14.0。
むむ? よく見たら、 _Microsoft Visual C++ Compiler for Python 2.7 てのが用意されてるのか。Python用のアレコレをビルドするための環境がMicrosoftのサイトから正式に入手できるとは…。嘘だろ。マジかよ。Microsoft、やるなあ。 _Windows での Python 2.7, 3.4, 3.5 の拡張モジュールビルド環境 - Qiita によると去年から用意してくれたらしい。Microsoft、凄いぞ。素晴らしい。いや、ちょっとコレ、 _ヤンキー効果 が入ってる気もするけど…。でも、スゴイ。Microsoft、グッジョブ。
とりあえず Visual C++ Compiler for Python 2.7 を Windows10上でインストール。スタートメニューに「Microsoft Visual C++ Compiler Package for Python 2.7」というフォルダが出来て、ショートカットが登録された。「Visual C++ 2008 32-bit Command Prompt」を実行。DOS窓が開いた。
>where cl C:\Users\ユーザアカウント名\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin\cl.exeこのへんにインストールされたのか…。「インストールしたユーザしか使えないよ」って感じかな…。 *1
cl /?と打つと、色々出てくる。
とりあえず、この Visual C++ のコンパイラを使いたい時は、「Visual C++ 2008 *-bit Command Prompt」を実行してDOS窓開いてそこで作業すべし、ということらしい。
_Microsoft Visual C++ Compiler for Python 2.7はひとのためならず | site-hhs を参考に、 _lru-dict とやらをビルドすることで動作確認。lru-dict-1.1.6.tar.gz をDLして解凍して中に入って python setup.py build と打ったら、buildというフォルダが作られて中に色々なファイルが作られた。どうやらちゃんと使えそうな予感。
◎ Nightly buildsがあるっぽい。 :
ここまで調べといてなんだけど。色々見ていたら、
_Unavailable nightly builds - Issue #66 - renpy/pygame_sdl2
で、「Nightly buildsは
_http://nightly.renpy.org/current/
の一番上にあるよ」てな話が…。しかし、DLして中を覗いたけどバイナリが入ってるようには見えなかった。何だろう、コレは…。
◎ githubからcloneしてビルドに挑戦してみる。 :
pygame_sdl2 がビルドできそうなのか、ダメ元でやってみる。再度書いておくけど、環境は Windows10 x64 + Python 2.7.13 32bit版。
「Visual C++ 2008 32-bit Command Prompt」を実行して、DOS窓を開いて…。
そのままだと C:\WINDOWS\system32\ というWindowsのシステム的に大変恐ろしい場所に居るので、cd でどこか問題無さげな場所に移動して。…Cドライブのルートにtempフォルダでも作ってそこに行こうかな。
適当なフォルダを作って、中に入って。
git clone で github からソース群をDL。git を使うので、git がインストールされてる必要有。もっとも、githubのページからzipをDLして解凍するのもアリかもしれんけど。
pygame_sdl2 というフォルダが作られた。中に入って、ファイルを確認。
ビルド時に必要になるという、pygame_sdl2_windeps も git clone でDL。
いきなりインストールするのは怖いので、まずはビルドだけ試してみる。
エラーが出た。cython がねえよ、って怒られてるような?
_Why don't have yet a release in PyPI? - Issue #39 - renpy/pygame_sdl2 によると、「Cythonをインストールしろや」って書かれてるな…。Cythonって何ですか?
_深入りしないCython入門 - Qiita
_WindowsでもCythonを使えるようにする。 - Qiita でインストール方法が紹介されてた。pip install でイケるらしい。
もう一度ビルドにチャレンジ。
とりあえず、処理が終わったっぽい。build というフォルダが作成されて、中に色々なファイルが入ってた。SDL2.dll等のファイルも見える。
一応ビルドが通ったように見えなくもないし…。怖いけど…インストールしてみるか…。
ここまでできたということは…。wheelパッケージとやらも作れるのだろうか?
_Python: Wheel でパッケージを配布する | CUBE SUGAR STORAGE によると、
試してみたら、dist というフォルダの中に、 _pygame_sdl2-2.1.0-cp27-cp27m-win32.whl というファイルができていた。コレを使ってインストールできるのかしら。一応置いときます。手元の環境では pip install 〜.whl でインストールできたけど、他の環境でインストールできるかどうかは不明。
「Visual C++ 2008 32-bit Command Prompt」を実行して、DOS窓を開いて…。
そのままだと C:\WINDOWS\system32\ というWindowsのシステム的に大変恐ろしい場所に居るので、cd でどこか問題無さげな場所に移動して。…Cドライブのルートにtempフォルダでも作ってそこに行こうかな。
mkdir C:\temp cd C:\temp
適当なフォルダを作って、中に入って。
mkdir pygame_sdl2 cd pygame_sdl2
git clone で github からソース群をDL。git を使うので、git がインストールされてる必要有。もっとも、githubのページからzipをDLして解凍するのもアリかもしれんけど。
git clone https://github.com/renpy/pygame_sdl2.git
pygame_sdl2 というフォルダが作られた。中に入って、ファイルを確認。
cd pygame_sdl2 dir色々なファイルがDLされた模様。Python でビルドやインストールに使われるらしい setup.py というファイルも見える。
ビルド時に必要になるという、pygame_sdl2_windeps も git clone でDL。
git clone https://github.com/renpy/pygame_sdl2_windepsdir と打って確認すると、pygame_sdl2_windeps というフォルダが作られてる。中にはビルドに必要な色んなファイルが入ってるらしい。
いきなりインストールするのは怖いので、まずはビルドだけ試してみる。
python setup.py build
エラーが出た。cython がねえよ、って怒られてるような?
_Why don't have yet a release in PyPI? - Issue #39 - renpy/pygame_sdl2 によると、「Cythonをインストールしろや」って書かれてるな…。Cythonって何ですか?
_深入りしないCython入門 - Qiita
Pythonは処理速度は決して早くない、むしろ遅い部類である。 そこで、C/C++に変換することにより高速化しようというのがCythonである。そういうものらしい。
_WindowsでもCythonを使えるようにする。 - Qiita でインストール方法が紹介されてた。pip install でイケるらしい。
pip install cythonたぶんこれでインストールされたんじゃないかな。
もう一度ビルドにチャレンジ。
python setup.py build警告がガンガン出てるけど、なんだかずらずらと表示しながら処理が進んでるっぽい…。ていうか、Windows上でやってるのに、
sh: sdl2-config: command not foundとか出てるけど、大丈夫なの? 自分の環境は mingw をインストールしているから sh.exe も入ってるけどさ…。
とりあえず、処理が終わったっぽい。build というフォルダが作成されて、中に色々なファイルが入ってた。SDL2.dll等のファイルも見える。
一応ビルドが通ったように見えなくもないし…。怖いけど…インストールしてみるか…。
python setup.py installPython2.7インストールフォルダ\Lib\site-packages\ の中に、pygame_sdl2-2.1.0-py2.7-win32.egg というフォルダが作られて、中に色々入った、ようではある。
ここまでできたということは…。wheelパッケージとやらも作れるのだろうか?
_Python: Wheel でパッケージを配布する | CUBE SUGAR STORAGE によると、
python setup.py bdist_wheelで作れるっぽいけど…。でも、site-packages\ の中は 〜.egg というフォルダが作られているんだよな…。
試してみたら、dist というフォルダの中に、 _pygame_sdl2-2.1.0-cp27-cp27m-win32.whl というファイルができていた。コレを使ってインストールできるのかしら。一応置いときます。手元の環境では pip install 〜.whl でインストールできたけど、他の環境でインストールできるかどうかは不明。
◎ サンプルは無いのかな。 :
動作確認してみたいのだけど、どこかにサンプルは無いのかな?
_renpytom/rapt-pygame-example: Example of using RAPT to package Pygame(_sdl2) games. で、Android版のサンプルは公開されてるようだけど…。
_rapt-pygame-example/main.py を眺めると、最初のあたりで、
_ウィンドウを表示する - 人工知能に関する断創録 を参考に、ウインドウを表示するだけのスクリプトを書いてみたり。
_helloworld_pygame_sdl2.py
一応動いたことは動いた、ような気がする。しかしコレだけでは見た目が pygame と変わらん…。何をどうしたら pygame_sdl2 で動いてるってことが分かるのやら。
_renpytom/rapt-pygame-example: Example of using RAPT to package Pygame(_sdl2) games. で、Android版のサンプルは公開されてるようだけど…。
_rapt-pygame-example/main.py を眺めると、最初のあたりで、
import pygame_sdl2 pygame_sdl2.import_as_pygame() import pygameみたいな感じで書いとけば、pygame_sdl2 が使われるっぽい。
_ウィンドウを表示する - 人工知能に関する断創録 を参考に、ウインドウを表示するだけのスクリプトを書いてみたり。
_helloworld_pygame_sdl2.py
# pygame_sdl2 test. window display only import pygame_sdl2 pygame_sdl2.import_as_pygame() import pygame from pygame.locals import * import os SCREEN_SIZE = (640, 480) def main(): pygame.init() screen = pygame.display.set_mode( SCREEN_SIZE ) pygame.display.set_caption('Hello pygame_sdl2') while True: screen.fill((0, 0, 255)) # screen fill Blue pygame.display.update() for event in pygame.event.get(): # check event if event.type == QUIT: return if (event.type == KEYDOWN and event.key == K_ESCAPE): # push Escape key ? return if __name__ == '__main__': main()
一応動いたことは動いた、ような気がする。しかしコレだけでは見た目が pygame と変わらん…。何をどうしたら pygame_sdl2 で動いてるってことが分かるのやら。
◎ 画像描画を試してみたり。 :
画像ファイルを読んで描画する処理を試してみたり。
_draw_image.py
_ufo.png
_bg.png
一応描画されたが、妙なメッセージが表示される。
libpng のバグ(?)らしい。
_Libpng errors - ArchWiki
_Cocos Studioで生成した.csbをcocos2d-xに読み込んだ際に"libpng warning: iCCP: known incorrect sRGB profile" - Qiita
_dvipdfmxで「warning: iCCP: known incorrect sRGB profile」というエラーが出る場合の対処方法 - Qiita
ImageMagickの convert を使って画像ファイル内から余計な情報を削除せよ、とのこと。
しかし、ImageMagick 7.0.3-2 の magick.exe を使ったら上記のオプションが反応しなかった。ImageMagick 6.9.1-10 の convert なら処理してくれたのだけど…。
書き方がいかんかったらしい。以下の書き方をしたら処理してくれた。
_draw_image.py
_ufo.png
_bg.png
# draw image by pygame_sdl2 try: import pygame_sdl2 pygame_sdl2.import_as_pygame() except: print "pygame_sdl2 not available" import pygame import pygame.image # from pygame.locals import * SCREEN_SIZE = (640, 480) def main(): pygame.init() screen = pygame.display.set_mode( SCREEN_SIZE, pygame.HWSURFACE | pygame.DOUBLEBUF ) pygame.display.set_caption('draw image by pygame_sdl2') sysfont = pygame.font.SysFont(None, 64) textsurface = sysfont.render("Hello world", True, (255, 255, 255)) bg = pygame.image.load('bg.png').convert() image = pygame.image.load('ufo.png').convert_alpha() x = 10 y = 10 dx = 2 dy = 1 bgx = 0 clock = pygame.time.Clock() cnt = 0 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: return if (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): return if x + dx < 0 or x + dx + image.get_width() >= SCREEN_SIZE[0]: dx *= -1 if y + dy < 0 or y + dy + image.get_height() >= SCREEN_SIZE[1]: dy *= -1 x += dx y += dy bgx -= 3 if bgx < -640: bgx = 0 # draw bg image screen.blit(bg, (bgx,0)) screen.blit(bg, (bgx + SCREEN_SIZE[0],0)) screen.blit(image, (x, y)) # draw image screen.blit(textsurface, (0, 0)) # draw text image # pygame.display.update() pygame.display.flip() clock.tick(60) # 60fps cnt += 1 if cnt % 180 == 0: print str(clock.get_fps()) + " FPS" if __name__ == '__main__': main()
一応描画されたが、妙なメッセージが表示される。
> python draw_image.py libpng warning: iCCP: known incorrect sRGB profile
libpng のバグ(?)らしい。
_Libpng errors - ArchWiki
_Cocos Studioで生成した.csbをcocos2d-xに読み込んだ際に"libpng warning: iCCP: known incorrect sRGB profile" - Qiita
_dvipdfmxで「warning: iCCP: known incorrect sRGB profile」というエラーが出る場合の対処方法 - Qiita
ImageMagickの convert を使って画像ファイル内から余計な情報を削除せよ、とのこと。
convert -strip input_file output_file
しかし、ImageMagick 7.0.3-2 の magick.exe を使ったら上記のオプションが反応しなかった。ImageMagick 6.9.1-10 の convert なら処理してくれたのだけど…。
書き方がいかんかったらしい。以下の書き方をしたら処理してくれた。
magick input_file -strip output_file
◎ そもそもSDL2って何だろう。 :
SDL1.2 に比べて SDL2 は何が違っているのだろう。
_SDL2の使い方 - mirichiの日記
_SDL2で出来る事メモごく一部 - nyaocatのがんばるブログ
_SDL 2.0と1.2に関するメモ
_SDL 1.2から2.0への移行
_SDL2の紹介
色々変わったらしいが…とにかく描画が速くなった、と思っておけばいいのかな。
_SDL2の使い方 - mirichiの日記
_SDL2で出来る事メモごく一部 - nyaocatのがんばるブログ
_SDL 2.0と1.2に関するメモ
_SDL 1.2から2.0への移行
_SDL2の紹介
色々変わったらしいが…とにかく描画が速くなった、と思っておけばいいのかな。
◎ pygameよりpygame_sdl2のほうが遅いらしい。 :
_Pygame_SDL2 runs slower when large quantity of sprites are drawn - Issue #36 - renpy/pygame_sdl2
で気になる話が。pygameよりpygame_sdl2のほうが遅いらしい…。
ここまで試したのに、なんじゃそりゃって感じ…。
でもまあ、おかげで Microsoft Visual C++ Compiler for Python 2.7 の存在を知ることができたのは幸いというか。
ここまで試したのに、なんじゃそりゃって感じ…。
でもまあ、おかげで Microsoft Visual C++ Compiler for Python 2.7 の存在を知ることができたのは幸いというか。
*1: 一応、ダウンロードページの下のほうに、「全ユーザで使える状態にしたいならオプションを指定してインストールすればできるよ」と書いてある。
[ ツッコむ ]
以上です。