Yohey's Slow Living

Take a break, have a cup of coffee, and have a nice day.

"No module named '_tkinter'"を解決しようとしたら……想像以上に大変だった話

私の環境はMacOS15.2 、Macbookair(M1)を使用している。

先日よりPython100dayChallengeをしているのですが、そのチャレンジとして、GUI操作できるToDoListを作りたいなと思い、Tkinterを使うことに(ChatGPTからの提案)。

しかし、これがどうにも動かない。

動かすたびに

Exception has occurred: AttributeError
module '_tkinter' has no attribute 'Tk'
File "xxxx.py", line 6, in <module> root = tk.Tk() ^^^^^ AttributeError: module '_tkinter' has no attribute 'Tk'
と表示される始末。
tkinter、インストールしてなかったっけ……?と思って、インストールを試すと、

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping

となる。

 

こうなってしまった原因はいくつもあった。
まず、最大の原因が、

古い環境のままになっていて、それを優先して呼び出していた。

私の場合、HomebrewのPythonは3.13.2がインストール済みとなるが、

.pyenv/shims/python3を使用している状態だった。

また、こちらのほうのPythonのバージョンは3.11.1だった。

つまり、過去に構築したpyenvが有効になっており、.pyenv/shims/python3が優先されていたのが原因(他にもあることが後に発覚するのだけど)。

ChatGPTくんにどうしたらいいですかね……?と聞いてみたところ、以下のような回答を得たので、試すことに。

1. .zprofile や .zshrc にこんな行がありませんか?

────────

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
────────

このあたりをコメントアウトしてください:

────────

# export PYENV_ROOT="$HOME/.pyenv"
# export PATH="$PYENV_ROOT/bin:$PATH"
# eval "$(pyenv init --path)"
# eval "$(pyenv init -)"

────────

2. 設定を反映

source ~/.zprofile  # または ~/.zshrc

3. バージョン確認

which python3
python3 --version

 
提案された内容を試してみると、使っているPythonのバージョンが一旦は3.13.2となる。
 
よし!ではVSCodetkinterが使えるか試してみるぞ!うん、つかえん!!!!
使えませんでした。
やはり、エラーを吐く。
なんでじゃ〜と思い、VSCode内のターミナルで
which python3
python3 --version
を実行してみると……
……????
あれ、まだ3.11なんだが……??
というか、まだあのpyenvとかいうPathを参照しているんだが……??
おかしい……さっき、ChatGPTさんに教えてもらった通り、.zprofileに書かれていた内容をコメントアウトし──
あ!!!!
.zshrc
こっちを確認していなかった!!
ということで、.zshrcを確認すると──

>>> conda initialize >>>

中略

<<< conda initialize <<<

という記述がある。

そういえば、昔々にAnaconda、インストールしたな……

さきほど、古い環境のままになっていて、と書きましたが、そう、Anacondaまで絡んでいたんですね……。

というわけで、再度ChatGPTくんに聞いてみる。

以下、ChatGPT先輩の回答。

────────

ありがとうございます!これは良い情報です。

状況を整理すると、pyenv だけでなく conda も起動時に有効になっていてPython のバージョンを奪い合っている状態ですね。

✅ 今のゴール

Homebrew でインストールした Python 3.13.x を常に使えるようにしたい(python3 --version で確認できるようにしたい)。


🧹 Step-by-step で環境をクリーンにする方法

✅ ① .zshrc から pyenv と conda を無効化する

現在の .zshrc にある下記の pyenv 関連と conda initialize 全体コメントアウトまたは削除してください:

# export PYENV_ROOT="$HOME/.pyenv"
# export PATH="$PYENV_ROOT/bin:$PATH"
# eval "$(pyenv init -)"

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# __conda_setup="$('/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
#     eval "$__conda_setup"
# else
#     if [ -f "/anaconda3/etc/profile.d/conda.sh" ]; then
#         . "/anaconda3/etc/profile.d/conda.sh"
#     else
#         export PATH="//anaconda3/bin:$PATH"
#     fi
# fi
# unset __conda_setup
# <<< conda initialize <<<

✅ ② .zprofile に以下を追記(Homebrew の Python を優先)

# Homebrew の初期化(すでにある場合は不要)
eval "$(/opt/homebrew/bin/brew shellenv)"

# Homebrew の Python を優先
export PATH="/opt/homebrew/bin:$PATH"

# python / pip の alias(必要に応じて)
alias python=python3
alias pip=pip3

✅ ③ ターミナルを再起動 or 設定を読み込み直す

source ~/.zshrc
source ~/.zprofile

✅ ④ Python のバージョンを確認

which python3
python3 --version

which python3/opt/homebrew/bin/python3 になっていれば成功!

そして python3 --version が 3.13.x であることを確認してください。

────────

さて、これで無事にTkinterを使えるぞ!と思ったのも束の間、

動!き!ま!せ!ん!!!

VSCodeでなんかうごきません!!

原因は──

────────

VSCode が使っている Pythonインタプリタ)」が、今あなたが整えた Homebrew の Python じゃない可能性が高いです。

────────

だそうだ。
頼む、ChatGPT大先生、改善の仕方を教えて下さい……。
以下の回答を得る。
────────

✅ 解決方法:VSCodePython インタプリタを明示的に指定しよう

1. VSCode を開く

2.コマンドパレットを開く(Cmd + Shift + P

3. Python: Select Interpreter を選ぶ

4.候補の中から次のようなものを選択:

Python 3.13.2 (homebrew)  —  /opt/homebrew/bin/python3

もしそれが表示されていなければ、「Enter interpreter path...」→「Find...」で直接 /opt/homebrew/bin/python3 を指定してください。

────────

私の場合、Find...」で直接 /opt/homebrew/bin/python3 を指定しました。

これで……?

動いた……?

動いてる……!!

ウインドウが出てきているよ……!!

はい。

まとめると、

①pyenvを優先して参照している

②そもそもAnaconda(Conda環境まで作っちゃっていた)

VSCodeでのインタープリタの指定ができていなかった

といった感じでした。
私の環境ほどぐちゃぐちゃになっている方は多くないかもしれませんが、
もし同じようにtkinterが使えないぞ……?となっている方は、
・今使っている環境はなにか?
・~/.zprofile  と ~/.zshrcに書かれている内容の確認
の3点をまずは確認してみてもいいかもしれません。
では。