質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

15145閲覧

pythonのtkinterのエラーを解決したいです。

YUUMO

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/09 10:20

本当に初心者なのですが調べれば調べるほど分からなくなっていったので質問させていただきます。

pythonを使うためにHomebrewインストール→pyenvインストール→python3.8.0インストールしました。
よく分からないけどanacondaもインストールしました。
VisualStudioCodeで書いているとIf this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinterと表示されてしまいます。数時間調べていろいろ試したのですが解決しませんでした。質問は2つです。①この問題の解決策を教えてもらいたい②僕のpythonのインストールのやり方で間違っているところはないか、またpythonはどのバージョンをインストールすべきか
急にこのエラーが出たので絶望しています。馬鹿な質問をしているかもしれませんが、よろしければご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

この問題の解決策

homebrewでインストールしたpyenvのバージョンが古い

古いバージョンのpyenvでは互換性に問題があるようです。アップグレードしてみて下さい。

brew upgrade pyenv pyenv rehash pyenv install 3.8.0

直らない場合

エラーがNo module named '_tkinterですので、pythonのモジュール検索パスに_tkinter.*.soが存在しないことが原因です。すなわち

  1. モジュール検索パスが間違っている
  2. モジュール検索パスは正常だが何らかの理由で_tkinter.*.soがない

第一にAnacondaとpyenvの設定の衝突が考えられます。$HOME/.bash_profileにあるAnaconda関連の設定を全て削除して下さい。その後ターミナルの再起動を行って下さい。

モジュール検索パスの確認方法

いろいろと試したとありますので、他にも不適切な設定が含まれているかも知れません(export PYTHONPATHで始まる行があるなど)。その場合、モジュール検索パスを確認した方が良いでしょう。次のコマンドでモジュール検索パスを確認することができます。

shell

1python -c 'import sys; print(sys.path)'

検索パスがリストで表示されますので、この中のどれかに_tkinter.*.soと言うダイナミックリンクライブラリ用のファイルがあること確認して下さい。私のmacOSでは下記のファイルがありました(pyenvではなくanyenvを使っているのは私の趣味です)。
$HOME/.anyenv/envs/pyenv/versions/3.8.0/lib/python3.8/lib-dynload/_tkinter.cpython-38-darwin.so

VSCodeで呼び出しているpythonが異なる

上記を行なってもなお動かない場合、pythonは正しくインストールされているのにVSCodeで呼び出しているpythonが全く別のpythonを呼び出している可能性があります。その場合はPython: Select Interpreterでpyenvでインストールしたpythonを設定して下さい。

pythonのインストールのやり方

初心者の方にはpyenvとAnacondaの共存は難しいです。どちらかにしましょう。pythonのバージョンをどれにするかは難しい問題です。参考にしている教材があれば同じバージョンを使用するのが良いです。異なるプログラムで異なるバージョン・パッケージを使うことは普通ですのでpipenv等を使って環境を分けるのが良いでしょう。

投稿2020/06/09 12:43

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUUMO

2020/06/09 13:14

$HOME/.bash_profileと打つと -bash: /Users/名前/.bash_profile: Permission denied と表示され、 モジュール検索パスを確認するとこのように表示されました                      名前noAir:~名前$ python -c 'import sys; print(sys.path)' ['', '/Users/名前/.pyenv/versions/3.8.0/lib/python38.zip', '/Users/名前/.pyenv/versions/3.8.0/lib/python3.8', '/Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynload', '/Users/名前/.pyenv/versions/3.8.0/lib/python3.8/site-packages'] 僕の知識が足りないため、どうなっているのか全く分かりません。もしこの説明で何か分かりましたらお力を貸していただけると幸いです。
yymmt

2020/06/09 14:04

/Users/名前/.bash_profileはコマンドではなくファイル名ですのでVSCodeで開くことができます。ただしモジュール検索パスを見る限り正常に設定されているようですので、このファイルを編集する必要はないと思われます(Anacondaとの衝突はなさそう)。 ターミナルで open /Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynload と入力するとFinderが開きます。そこに_tkinter.cpython-38-darwin.soというファイルがあるか確認して下さい。なければpyenvでインストールしたpython 3.8.0に問題があります。ない場合、インストール時にtcl/tkが正しく認識されていない可能性があります。/System/Library/Frameworks/Tcl.frameworkというディレクトリはありますでしょうか? ファイルが存在するのであれば次のコマンドを確認してみましょう。 python -c 'import _tkinter; print(_tkinter)' これが成功すると使用しているモジュールのファイル名が表示されます。それに対して otool -L 表示されたファイル名 とするとリンクされているライブラリが表示されます。
YUUMO

2020/06/09 14:33

返信ありがとうございます。自分でも意味がわからないので、伝わらなかったすみません、open /Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynloadと入力するとFinderのlib-dynloadというファイルを開いたのですがそこには_tkinter.cpython-38-darwin.soはなかったのですが、Finderの検索欄に_tkinter.cpython-38-darwin.soを入力するとlib-dynloadの中に存在すると表示されます。また、/System/Library/Frameworks/Tcl.frameworkというディレクトリはFinderで検索してもヒットしませんでした。
yymmt

2020/06/09 14:43

すいません、Finderではなくlsコマンドではどうでしょうか?すなわちターミナルで ls /Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynload とした場合に表示されますでしょうか。表示された場合 otool -L /Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynload/_tkinter.cpython-38-darwin.so とするとどうなりますか? もしある場合、上記のimport _tkinterを実施するとどうなりますか。ここに解決のヒントがありそうです。
YUUMO

2020/06/09 14:59 編集

ls /Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynloadと入力すると_tkinter.cpython-38-darwin.soは表示されませんでした。 otool -L /Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynload/_tkinter.cpython-38-darwin.soと入力すると /Library/Developer/CommandLineTools/usr/bin/objdump: error: '/Users/名前/.pyenv/versions/3.8.0/lib/python3.8/lib-dynload/_tkinter.cpython-38-darwin.so': No such file or directoryと表示されました。 すみません上記のimport _tkinterを実施するという意味が分かりませんでした。何度も申し訳ないです。
yymmt

2020/06/09 16:17

> _tkinter.cpython-38-darwin.soは表示されませんでした ということですのでpyenvでpython 3.8をインストールした際にTcl/Tkを見つけられずコンパイルされなかったのが原因です。Finderでは見つかったということですが、そのファイルはどこにインストールされていますか? Finderで検索して、見つかったファイルをターミナルにドラッグ&ドロップするとインストールされているフルパスが表示されますので教えて頂けますか? 今気になっているのはpyenvでpython 3.8.0をインストール時にTcl/Tkを見つけられなかった理由です。Tcl/Tkは歴史のあるソフトウェアでmacOSでは標準で含まれています。homebrewで新しいバージョンをインストールすることも可能ですが、インストールしなくても動きます。 込み入って来たので、幾つか確認させてください。 1. ls /System/Library/FrameworksにTcl.frameworkはありますか? 2. homebrewでtcl-tkをインストールしましたか? 3. ActiveTclをインストールしましたか? また「上記のimport _tkinterを実施する」とは下記のコマンドのことです。 python -c 'import _tkinter; print(_tkinter)' ただしファイルがないということなのでエラーになると思います。
YUUMO

2020/06/09 22:29 編集

何度もお返事くださり、本当にありがとうございます。 _tkinter.cpython-38-darwin.soをターミナルにドロップすると/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_tkinter.cpython-38-darwin.soと表示されました。 ①ありました ②いろいろいじってしまった中で(brew install tcl-tk)でインストールした記憶はあるのですが、$ brew info tcl-tk と入力すると、-bash: $: command not foundと表示されました。 ③ ActiveTclをインストールした記憶はありません。 ④import _tkinterをしてみると Traceback (most recent call last): File "<string>", line 1, in <module> ModuleNotFoundError: No module named '_tkinter' こうなりました
yymmt

2020/06/09 22:59

/Library/Frameworks/Python.frameworkがあるということは、python.orgからダウンロードした公式のpythonを既にインストールされているのですね。ここからの方策ですが2種類あります。 1. 公式のpythonを無効にする 2. 公式のpythonを使う どちらもVScodeで/Users/名前/.bash_profileを開いて設定します。 公式のpythonを無効にするには PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}" の行の先頭に#をつけてコメント化した上で、ターミナルを再起動して下さい。 その後、 pyenv uninstall 3.8.0 pyenv install 3.8.0 として見てください。 公式のpythonを使う場合は、先ほどコメント化した行の#を取って戻した上で、今度は eval "$(pyenv init -)" という行の先頭に#をつけてターミナルを再起動してください。 公式のpythonには既に_tkinterモジュールが含まれていたので使えるはずです。
YUUMO

2020/06/10 00:42 編集

毎回丁寧にありがとうございます。 /Users/名前/.bash_profileをVScodeで開くというのは、VScode内のターミナルに入力する、もしくは/Users/名前/.bash_profileというファイルをVScodeで開くという認識で合っているでしょうか VScode内のターミナルに入力すると、bash: /Users/名前/.bash_profile: Permission deniedと表示され /Users/名前/.bash_profileというファイル、フォルダは存在しませんでした。
yymmt

2020/06/10 00:23

そういえばCatalina以降はデフォルトシェルがbashではなくzshでした。 echo $SHELL として/bin/zshと出るのであれば /Users/名前/.zshrc を編集して下さい。 あと公式pythonがpyenvのインストールに影響を与える可能性があるならば、Anacondaも影響を与える可能性があることに気がつきました。Anacondaを無効にするために# >>> conda initializer >>> から # <<< conga initialize <<<までの行の先頭に全て#をつけてコメント化して下さい。
YUUMO

2020/06/10 00:43

確認したところ、/bin/bashと出たので、シェルはbashなんだと思います。
yymmt

2020/06/10 03:32

原因が分かった気がします。pyenv、anaconda、そして公式pythonをインストールしたけれども、どれも使うようにはセットアップされていない、ということですね。今起動されているpythonはmacOSに標準でインストールされているpython 2.7系列ではないかと思います。次のコマンドで確認して下さい。 python -V これをpyenvでインストールした3.8.0にするには /Users/名前/.bash_profile というファイルを新たに作り下記の一行を加えて下さい。 eval "$(pyenv init -)" その後ターミナルを再起動して下さい。 念のためにpyenvでインストールした3.8.0も再インストールした方が良いでしょう。 pyenv uninstall 3.8.0 pyenv install 3.8.0 その後、 pyenv global 3.8.0 とした後に python -V として見て下さい。バージョンは変わりましたでしょうか。 またtkinterも使えるようになっている可能性があります。
YUUMO

2020/06/10 10:32

試してみたのですがいまだにpyenvのpythonではうまくいきませんでした しかし、anacondaのpythonを使うとできるようになりました。 親身になって教えていただき本当にありがとうございました!いろいろ勉強になりました!
yymmt

2020/06/10 13:40

解決されたようで何よりです。anacondaを使う場合、pyenvの設定 eval "$(pyenv init-)"は.bash_profileから削除した方が良いと思います。
guest

0

ベストアンサー

「pyenvのpythonでtkinterを使用する方法」を参考にして

以下のコンパイルオプション
--with-tcltk-includes
--with-tcltk-libs

それぞれにtcl-tkを指定して、pyenvでpythonをインストールしてください。

tkinterが使えるpythonができます。

投稿2020/06/10 01:39

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUUMO

2020/06/10 02:52 編集

本当に無知で申し訳ないんですが、 以下のコンパイルオプション --with-tcltk-includes --with-tcltk-libs それぞれにtcl-tkを指定して、pyenvでpythonをインストールという意味がよくわかりません どういう手順をとればいいか教えていただけませんか
technocore

2020/06/10 02:59

ちなみにAnacondaのPythonなら、デフォルトでtkinterが使えるはずです。 試してみましたか?
YUUMO

2020/06/10 10:29

Anacondaのpythonでやるとできました!!ありがとうございます!! 図々しいですが一つ質問させてください、 僕はプログラミング初心者なんですが、今のところpythonしかやったことがありません他の言語も並行してやった方がいいと思われますか?それともひとまずpythonのみをやっていくべきでしょうか?
technocore

2020/06/10 10:50

Tkinter動きましたか。おめでとうございます。 pythonしか、とおっしゃいますが数学、統計学、機械学習やディープラーニングなどPythonが活躍している分野はたくさんありますので極めてください。 あとWebアプリ開発に興味はありますか?Node.JSが面白いですよ。 サーバアプリもクライアントアプリもJavascriptで開発できるツールです。 Homebrewから簡単にインストールできるので試してみてください。
YUUMO

2020/06/10 21:59

Webアプリ開発もやってみたいので、Node.JS挑戦しようと思います!! ありがとうございました!
guest

0

If this fails your Python may not be configured for Tk

pyenvでインストールしたpythonでtkinterが動かない原因はこれです。

とりあえず参考になりそうなサイトを挙げておきます。
pyenvのpythonでtkinterを使用する方法

まずはhomebrewでtcl-tkをインストールしてから始めてください。

pyenvでインストールするときは/usr/local/bin/python-buildコマンドでpythonがビルド
されます。
そのときincludeとlibにtcl-tkの指定が必要なのです。

投稿2020/06/09 15:26

編集2020/06/09 15:31
technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

①この問題の解決策を教えてもらいたい

VisualStudioCodeはあまり使ってないので、直接回答ではありませんが、

 追加で、VisualStudioCode側の設定も必要かもしれません。環境変数等。

  • もしくは、VisualStudioCode の実行時の設定で他のpythonを選択はできないでしょうか?

②僕のpythonのインストールのやり方で間違っているところはないか、

間違いではありませんが、
pyenvは標準ではなく、追加で設定が必要、位の認識でいます。

最初に挑戦するには、少し無駄にハードルが上がっている側面もあるので、
もし必要だとしても、後々 pyenv の利用を検討するで良いかな。

敢えて指摘するなら、環境構築ができないうちに複数の環境をインストールするのは、
他のバージョンの設定が影響する等の可能性もあるので、悪手だと思います。

またpythonはどのバージョンをインストールすべきか

まずは、公式サイトの新しい安定バージョンでの環境構築をしてみましょう。

参考にされてる書籍等で指定のバージョンがあれば、同じバージョンが良いことも有ります。
(古い情報でないかを確認。大雑把に2.7系か 3.x系かの確認位で良いと思います)

投稿2020/06/09 10:53

teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUUMO

2020/06/09 13:19

丁寧にありがとうございます。 やはり最初からいろいろなものに手をつけたのが間違いだったのかもしれません 無理そうな場合は公式サイトの安定バージョンでやってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問