見出し画像

【pyxel 1.5】スタンドアロン版pyxelを使ってみる

バージョン1.5以降の新版pyxelではpython環境がない端末でも手軽にpyxeで作ったゲームが遊べるようにスタンドアロン版が用意されています。
今回はスタンドアロン版pyxelを入れていろいろ動かしてみた記録です。

まずはインストール。
GitHubのpyxelのページから落とします。

READMEの中にあるリンクからダウンロードページへ移動。Windowsに入れるのでpyxel-1.6.5-windows-setupのexeファイルをダウンロードします。

▲ダブルクリックするとこんな感じのインストールウィザードが開きます。

インストール自体はシンプルに進みますが、重要なのは次のオプション部分。

▲ファイル拡張子との紐づけと環境変数への追加を行います。これでpyxel関連のファイルはスタンドアロン版pyxelが処理してくれるようになります。

あとは流れに沿ってインストールを完了。

▲ちょっと見ずらいですが、pyxappファイルがpyxelのアイコンになっています。

ではこれをダブルクリックで起動してみます。

▲動いた!!

今まではAnacondaを起動して、python環境にしてから起動だったので、ダブルクリックで直に行けるのはかなり良い感じですね。

さてさて、基本的にはここまでですが、このスタンドアロン版pyxelのちょっと難しい部分も書いておきます。もしかしたら今後のアップデートで変わるかもしれないので、2022年1月現在ということはご留意ください。

・ファイルの実行パスがスタンドアロン版pyxelのインストールフォルダになる(?)。※もしかしたらAppdata/temp固定かも…。
スタンドアロン版pyxelのインストールフォルダはWindowsでデフォルトだとC:\Users\ユーザー名\AppData\Local\Programs\Pyxelというところに入ります。
ここで例えば先ほどのようにpyxappファイルを別のディレクトリから起動したとすると、おそらくC:\Users\ユーザー名\AppData\Local\Tempが実際の実行パスになっているようです。このTempフォルダはWindowsではいろいろなプログラムが一時ファイルを置くのに使っているので、もしかしたらインストールパスに関わらず、ここが実行パスになるのかもしれません。ちょっとしっかり検証はしていないので、あれなんですが。
ともかく、ダブルクリックで起動したファイルの場所は実行場所ではないということです。これがどういった場合に影響するか。
例えば以前pyxelで作ったRPGでは、データセーブの部分にこんなコードがあります。

with open('DATA/data.csv', 'w', newline="") as f:

実行ファイルから相対パスで同階層にあるDATAディレクトリの中のdata.csvにゲームデータをセーブします。
pyxappファイルを試した際はこんな感じのディレクトリ構成でやってみました。

|
|
-----DATA
|     |
|     | 
|     -----data.csv
|
-----main.pyxapp

ところがこれではうまくいきません。上記の通り、実際の実行場所はmain.pyxappとは全然違うところにあるので、相対パスで追えないのです。対処法としては、絶対パスで書いてしまえば大丈夫なのですが、セーブデータをどこに置くかが決まってしまうので、ちょっと柔軟性は失われてしまいます。ここはちょっと解決策が浮かばないので、先ほどのRPGは改造して、面クリア型にしてみるのも良い気がしてきました。セーブという機構を抜いて、ゲームを細切れにすれば何とかなりそうです。

・pythonライブラリによってはうまく動かない
これは実際には上のセーブの件と関連して出てきたのですが、相対パスが使えないと分かった僕はこう考えました。
「じゃあtkinterのファイルダイアログ使って、手動でデータファイルを選ぶようにしよ」
Windowsアプリではよくある感じで、開くファイルをファイルダイアログ(エクスプローラーみたいなやつ)から選ぶ方式です。ちょっと手間だけど、これはこれでよさそう。
ところが! tkinterを入れたコードではうまく動かない。python環境では動くけどスタンドアロン版では動かない。まぁ、ここら辺は仕方ないかなという気はしています。スタンドアロン版pyxelはpython環境そのものではないので、pythonのライブラリで動かないやつがいても不思議ではないです。tkinterは動かなかったけど、他のモジュール(randomとか)は動くので、モジュールでも動くやつと動かないやつがいるっぽいです。詳しくはちょっと分からないですが、仕方ない。
ちなみにスタンドアロン版のインストールフォルダをのぞいてみると.pydという拡張子のファイルが見つかります。検索してみたところ、これはpythonライブラリをdllのようにしたもののようです。へー。
もしかしたらこういった手法を使えばtkinterも入れれるのかもしれないですが、そこまですることではないのでやめときます。

さて、今回はここまで。
妙なところに引っかかって深堀りするはめになってしまいましたが、このスタンドアロン版pyxel、基本的にはすごく便利なのでお勧めです。
読んでいただきありがとうございました。


この記事が参加している募集

ここまで読んでいただきありがとうございます!