見出し画像

Pyxelのつまづき("import pygame"が使えない)

結論:M2 Macでは使えない、Windows環境下なら使えるようです。
結局は自分の環境なのかもしれない。
よくわからない。
確かにM2 Macはいろいろ問題が・・・


経緯は以下に・・・

昨日から調べてますが解決に至ってません。

事の発端:
みねかさんの「CODE OF PYTHON」を動かそうと.pyxapp ファイルを作成して実行すると

ModuleNotFoundError: No module named 'pygame'

というエラーが出て実行できず。
pythonでは使えてるpygameなんですが、pyxelでは認識できていない?

python3 -m pip list
を実行するとlistには

pygame 2.6.0

存在します(pythonでは動くので)

以下のようにpygameをインストールしなおしてもだめでした。

python3 -m pip list
→pygameがいることを確認
pip uninstall pygame
python3 -m pip list
→pygameがいないことを確認
pip install pygame
python3 -m pip list
→pygameがいることを確認
pyxel play code_of_python-main.pyxapp
→ModuleNotFoundError: No module named 'pygame'

python3 -m pip list
→pygameがいることを確認
pip3 uninstall pygame
python3 -m pip list
→pygameがいないことを確認
pip3 install pygame
python3 -m pip list
→pygameがいることを確認
pyxel play code_of_python-main.pyxapp
→ModuleNotFoundError: No module named 'pygame'

うーむ・・・何が・・・
pygameのバージョン?とか?

pyxelを強制再インストールしてみる
pipx ensurepath --force
pipx install pyxel --force
pyxel play code_of_python-main.pyxapp
→ModuleNotFoundError: No module named 'pygame'

これは予想通り(そんなもんじゃ変わらない)

pipx upgrade pyxel
→pyxel is already at latest version 2.1.5 (location:.....
pyxel play code_of_python-main.pyxapp
→ModuleNotFoundError: No module named 'pygame'

そういう問題ではない

一旦保留して、pyxappをexe化すれば良いのでは?と思い、app2exeを試す。

pyxel app2exe code_of_python-main.pyxapp
→Pyinstaller is not found. Please install it.
→Pyinstallerが無いのでインストール
pip3 install Pyinstaller
→インストール成功したので
pyxel app2exe code_of_python-main.pyxapp
→Pyinstaller is not found. Please install it.

はて?

python3 -m pip list

pyinstaller 6.9.0
pyinstaller-hooks-contrib 2024.7

いるみたいだけど?("p"が大文字ではないけど・・・)

使えない?macだから?
ここでもつまづき・・・

その後いろいろ調べてみるも、
pyxelの古いバージョン(Pyxel1.9.4)ではexe化できてたらしい。(今は2.1.5)
そもそも"pyxel play"でエラー出てる場合exe化しても動かないらしい。

そんなわけで、戻ってpygameの謎にせまる。

pygameを使った簡易なサンプルで試す

import pygame
import pyxel

class MusicPlayer:
	def __init__(self,filename):
		pygame.mixer.init()
		pygame.mixer.music.load(filename)
		pygame.mixer.music.play(1) #イントロ有りで1曲丸々再生

	def loop(self,time=0.0):
		pos = pygame.mixer.music.get_pos() #再生している音楽の再生時間を取得する
		if int(pos) == -1: #再生が終了するとposは-1を返すんだって!知らなかった!
			pygame.mixer.music.play(-1,time) #-1を指定することでループ再生、timeの指定秒数からスタートさせる

class App:  
	def __init__(self):
		self.music_player = MusicPlayer('./test.mp3')
		pyxel.run(self.update, self.draw)
        
	def update(self):
		self.music_player.loop(time=3.0) #time(ミリ秒まで指定可能)を指定することで指定秒数からスタートさせる
            
	def draw(self):
		pass

App()

やはり同じエラーになる。

pyxel 1.9.4を入れてみる
pipx uninstall pyxel
pipx install pyxel==1.9.4

pyxel --version
Pyxel 1.9.4, a retro game engine for Python
usage:
pyxel run PYTHON_SCRIPT_FILE(.py)
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE(.py)
pyxel play PYXEL_APP_FILE(.pyxapp)
pyxel edit [PYXEL_RESOURCE_FILE(.pyxres)]
pyxel package APP_DIR STARTUP_SCRIPT_FILE(.py)
pyxel app2exe PYXEL_APP_FILE(.pyxapp)
pyxel copy_examples
A new version, Pyxel 2.1.5, is available.

1.9.4に切り替わりを確認
→結果は同じ、バージョンの違いではない

2.1.5に戻しました

検索してもpythonに関することばかりでpyxelでは問題にすらなってない。
さらに調査はつづく・・・

2024.07.20 17:00追記:

/Users/xxxxx/Library/Python/2.7
/Users/xxxxx/Library/Python/3.8
/Users/xxxxx/.local/pipx/venvs/pyxel/lib/python3.12

pythonが混在しているので一旦pythonを全部削除してからpyxelのみを入れなおしてみた。
pythonは、pyxelのpython3.12だけにしました。

すると、python3にもpygameが入らなくなってしまった・・・
そもそもPyxelのpython3にpygameがインストールできないってことなのか?

2024.07.20 17:25追記

単純にpython3入れればpygame入れられるんじゃ

mac用python3(3.12.4)をインストール
その後、
pip3 install pygame

Collecting pygame
Using cached pygame-2.6.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (12 kB)
Using cached pygame-2.6.0-cp312-cp312-macosx_11_0_arm64.whl (12.4 MB)
Installing collected packages: pygame
Successfully installed pygame-2.6.0

予想通りで、ここにはインストールできるが、Pyxel下には入っていないので解決しない。

やはり、Pyxel環境下にpygameがインストールできていないことが問題。

さて・・・

2024.07.20 17:30追記

調べている過程にて

/Users/xxxxx/Downloads/pyxel/UserSample/Graslay_231/pyxel_lib/pygame

Graslay_231のフォルダ下のpyxel_libにpygameが存在した。
つまりはここに入れる方法が何かあるはず!

pipx install pygame
が成功すれば大丈夫な気がしてきたが実際には入らないのでどうしたものか。

2024.07.20 21:00追記

結局のところ

pip3 install pygame

としてインストールするものなら

python3 で使用している import pygame と pyxelで使用している import pygame は同じもの。
同じだとしたら、pyxelからのimportできないのはなぜか?

PATHかと思ったが、python3からは見えるのでそれは無い。

pyxelになんらかの設定が必要?
どこにもそんな記述は無い。
なにか見落とししてるのか?

開発環境vscodeとかにするとうまくいくのかな?
公式ページのIssue Trackerとか見てるけどそれっぽいものは無さそう。

疲れたのでこの件はまたいつの日にか・・・
間置けばまた何か気づきあるかも!


まだ混沌とした状態が続いています・・・
参考までに使用PCは、M2 Mac macos:sonoma14.5

2024.07.23追記

やや進展
問題はM2 Macだから・・・かも

Windows環境にpyxelを入れてみよう!
とMac上Parallesを使ってWindows11を使用していますが
これまではPermission Errorとか言われてpythonインストールでつまづいていました。

調べてみると、
Wondowsのpython 3.11.2
Macのpython 3.11.4
があったりとややこしい状態になっていたので、Windowsのpython 3.11.2を一旦削除、Windowsのpython 3.11.4をインストール。
その後Pyxelをインストールして無事成功。

改めて、CODE OF PYTHONを動かしてみました。

import pygame は無事通過!
これで起動するかと思われましたが新たなエラーが・・・

File "code-of-python.py", line 1059, in <module>
App()
File "code-of-python.py", line 209, in init
pyxel.init(WINDOW_W,WINDOW_H,title="CODE OF PYTHON",fps = 60,quit_key=pyxel.KEY_NONE) #ゲームウィンドウのタイトルバ ーの表示とfpsの設定(60fpsにした),キーボード入力による強制終了は無しとする pyxel.init(caption=)がpyxel.init(title=)に変更されたっぽい???
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pyo3_runtime.PanicException: Failed to create OpenGL context

pyxel.init()でエラーになっている。
OpenGL context作成エラー????

なんのこっちゃ

pygameをコメントアウトにしても同じエラー発生したので何も解決してないようなので、、、pygame使えたらいろいろ試したいことはあったけど、また機会あれば調査します。

おまけ:
みねかさんの「CODE OF PYTHON」はソースからpygame, bgm関係を全部コメントアウトにすることによってBGMは無いけど遊べることができました。よくできたゲームだと思いました。私はここまで作る根気は無いなぁ。

この記事が気に入ったらサポートをしてみませんか?