2018/11/07(水) [n年前の日記]
#2 [python] 手元のPCに入ってるPythonのモジュールをアップデート
ふとなんとなく、手元の環境、Windows10 x64 + Python 2.7.12 上でインストールしていたモジュールについて、アップデート作業をしてみたり。
まずは Pthon 2.7.12 を 2.7.15 にアップグレード。公式サイトから python-2.7.15.msi をダウンロードして実行。Python 2.7.12 が入ってるフォルダに上書きインストール。
本当に上書きでいいのだろうか。一旦アンインストールしてからインストールしたほうが良くないか。しかしその場合、別途インストールしていた各モジュールはどうなるのだろう。なんだか怖いので毎回上書きしちゃってるけど…コレっていいのかなあ…。
DOS窓を開いて python のバージョンを確認。
モジュールをアップデート。まずは更新可能なモジュールの一覧を表示。
一つずつアップデート。
依存関係がよろしくないモジュールがいくつかあったような気がするけれど…問題が出てから対処しよう…。
pycairo、pygobject はアップデートできなかった。ビルドするための環境が必要らしい。prompt-toolkit も、ドキュメントには 1.x と 2.x で仕様が違うと書いてあったので、アップデートしなかった。
まずは Pthon 2.7.12 を 2.7.15 にアップグレード。公式サイトから python-2.7.15.msi をダウンロードして実行。Python 2.7.12 が入ってるフォルダに上書きインストール。
本当に上書きでいいのだろうか。一旦アンインストールしてからインストールしたほうが良くないか。しかしその場合、別途インストールしていた各モジュールはどうなるのだろう。なんだか怖いので毎回上書きしちゃってるけど…コレっていいのかなあ…。
DOS窓を開いて python のバージョンを確認。
> python --version Python 2.7.15
モジュールをアップデート。まずは更新可能なモジュールの一覧を表示。
pip list --o
一つずつアップデート。
pip install -U hoge
依存関係がよろしくないモジュールがいくつかあったような気がするけれど…問題が出てから対処しよう…。
pycairo、pygobject はアップデートできなかった。ビルドするための環境が必要らしい。prompt-toolkit も、ドキュメントには 1.x と 2.x で仕様が違うと書いてあったので、アップデートしなかった。
◎ pygletのサウンド関係が変わってた。 :
pyglet を 1.3.2 にアップデートしたら、昔書いたスクリプトが動かなくなった。どうやらサウンド関係の仕様が変わってしまったらしい。
自分、以前はどのバージョンを使っていたのだったか…。
_mieki256's diary - pygletを1.3.0rc1にしてみたら遅くなった
どうやら 1.2.4 か 1.3.0rc1 を使っていたと思われる。
さておき、変更点をメモ。pyglet はデフォルト状態だと wavファイルしか鳴らせないので、avbin なるものを導入 *1 して、mp3 や ogg も再生できるようにしてからスクリプトを書いたのだけど。その avbin 関係が少し変わってるように見えた。
それと、ループ再生の仕方が変わってた。
以前は以下のような感じで呼んでたけど。
pyglet.media.ManagedSoundPlayer は無くなって、「pyglet.media.Player を使え」という仕様になったようで。
_pyglet.media - pyglet v1.2.4
また、EOS_LOOP は無くなって、「SourceGroup.loop を使え」という仕様になった模様。
_Player Class - pyglet v1.2.4
_python - Haven't changed my code but it stopped working: `object has no attribute 'EOS_LOOP'` - Stack Overflow
ゲーム関係のライブラリやツールって、バージョンによって仕様がコロコロ変わるところがあるからなんだかアレだなと。Unity もそうだったし…。まあ、ゲームが完成したらそこでプロジェクト終了、みたいな昔風のノリがちょっと残っているのだろう…。
自分、以前はどのバージョンを使っていたのだったか…。
_mieki256's diary - pygletを1.3.0rc1にしてみたら遅くなった
どうやら 1.2.4 か 1.3.0rc1 を使っていたと思われる。
さておき、変更点をメモ。pyglet はデフォルト状態だと wavファイルしか鳴らせないので、avbin なるものを導入 *1 して、mp3 や ogg も再生できるようにしてからスクリプトを書いたのだけど。その avbin 関係が少し変わってるように見えた。
- avbin のバージョンを調べる、pyglet.media.avbin.get_version() が見当たらない。
- avbin が使えるかどうかを調べる pyglet.media.have_avbin を pyglet.media.have_avbin() の形で呼ばないと True , False を返してくれない。ただ、コレは以前のスクリプトで記述ミスをしていた可能性もありそう。
それと、ループ再生の仕方が変わってた。
以前は以下のような感じで呼んでたけど。
self.sndplayer = pyglet.media.ManagedSoundPlayer() self.sndplayer.queue(self.bgm_src) self.sndplayer.eos_action = self.sndplayer.EOS_LOOP # ループ再生を設定 self.sndplayer.play() # 再生開始pyglet 1.3.2 は以下のように書いたらループ再生してくれた。
self.loop_music = pyglet.media.SourceGroup(self.bgm_src.audio_format, None) self.sndplayer = pyglet.media.Player() self.loop_music.queue(self.bgm_src) self.loop_music.loop = True # ループ再生を設定 self.sndplayer.queue(self.loop_music) self.sndplayer.play() # 再生開始
pyglet.media.ManagedSoundPlayer は無くなって、「pyglet.media.Player を使え」という仕様になったようで。
_pyglet.media - pyglet v1.2.4
また、EOS_LOOP は無くなって、「SourceGroup.loop を使え」という仕様になった模様。
_Player Class - pyglet v1.2.4
_python - Haven't changed my code but it stopped working: `object has no attribute 'EOS_LOOP'` - Stack Overflow
ゲーム関係のライブラリやツールって、バージョンによって仕様がコロコロ変わるところがあるからなんだかアレだなと。Unity もそうだったし…。まあ、ゲームが完成したらそこでプロジェクト終了、みたいな昔風のノリがちょっと残っているのだろう…。
*1: Windowsの場合、avbin.dll をスクリプトと同じ場所に置く。
[ ツッコむ ]
以上です。