こちらのようにRaspberry PiにインストールされているPythonのアップデート作業中です。
現状、Pythonそのものはv3.12.9への移行が完了しましたが、python -m tkinterを実行した際にModuleNotFoundErrorが発生しています。
エラー情報としては下記のようになっており、何らかの設定が必要のような認識でいますが、何の設定が必要なのか…?と悩んでいます。
Traceback (most recent call last): File "<frozen runpy>", line 189, in _run_module_as_main File"<frozen runpy>", line 148, in _get_module_details File"<frozen runpy>", line 112, in _get_module_details File "/usr/local/bin/python3.12/tkinter/__init__.py", line 38, in <module> import _tkinter # If this fails your Python may not be configured for Tk ^^^^^^^^^^^^^^^ ModuleNotFoundError: No module named '_tkinter'
別サイトなどではpython3-tkのインストールで解決した事例もあるようで試してはみましたが、以下のメッセージが出力された点も理解が出来ていないです(v3.12.9へ切り替えたにも関わらず、v3.11.23での判定がされている?)。
python3-tk はすでに最新バージョン (3.11.2-3) です。
> 別サイトなどではpython3-tkのインストールで解決した事例もあるようで試してはみましたが、
インストール後にPythonはビルドし直しましたか?
https://devguide.python.org/getting-started/setup-building/index.html#build-dependencies
の Install dependencies は読んでいますか?
コメントありがとうございます。
質問末尾に記載のターミナルの情報から、インストールそのものがされていないのではないか?と思っていますが、この状況での再ビルドは効果があるものなのでしょうか?
すみません。python3-tkは(質問の状況とは)なんの関係もない話でした
なのでそのインストールは何も関与しません
やはりそのようですよね…
恐らくはv3.12.9導入時点で何らかの設定不足があるのか…?とは思っていますが、質問のような状況(aptでのインストール時に別バージョンが参照されている?)で何か前例の見覚えなどあったりしませんか?
手元の Ubuntu Linux 24.10 では python3.12-tk というパッケージに以下の shared library が含まれています。(import _tkinter でこの shared library が読み込まれます)
/usr/lib/python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so
そちらの環境でデフォルトでインストールされているのは Python3.11 なのだと思います。(/usr/bin/python3.11 というコマンドがあるはず)
コメントありがとうございます。
確かにデフォルトはv3.11になっていましたね。
一時凌ぎ的にですが、v3.12に上げる理由になっていた機能の利用を断念してv3.11にて運用し、少し調べたりしながらv3.12の環境が作り込め次第、順次そちらへ移行の形にしてみます。
> なのでそのインストールは何も関与しません
と思いましたが……もともとtkが入ってなかったなら、python3-tk を入れたことでtkも入って、ビルドをconfigureからやり直したら動くこともありえるのでは?
tkinterが見付からないエラー → 理屈的には分かる
apt installで最新バージョン判定 → ???
といった状況にあり、そもそもpython3-tkは入っているから、新たに入れさせてくれないという謎の状況です…
不幸中の幸いだったのは、今回のきっかけになったモジュール(typing)は機能的に必須なものではなかったため、今回は切り捨てる方向で走らせておこうかと思います。
両名、コメントありがとうございました。
tkinter ですよね?
補足しておきますと、x86_64 版 Ubuntu Linux 24.10 では libtcl8.6 と libtk8.6(Tcl/Tk 関連の shared library)を apt でインストールしてから、Python3.12 をビルドすれば先述の _tkinter.cpython-312-x86_64-linux-gnu.so が作成されます。
ちょっと気になるのでOS(ディストリビューション)の情報を質問に書いてもらえないでしょうか?
返答遅れて申し訳ありません。
確認次第折り返させていただきます。