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

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

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

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

Q&A

解決済

2回答

1914閲覧

tkinterがアップデートできません

miraimirai

総合スコア39

Python

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

0グッド

0クリップ

投稿2021/05/11 09:51

編集2021/05/12 04:38

前提・実現したいこと

tkinterをアップグレードしてプログラム上で使いたいです。

発生している問題・エラーメッセージ

tkinterがアップグレードされません。

試したこと

https://kagakunomemocho.com/python-tk/
を試しましたがtkinterが8.5のままです。

補足情報(FW/ツールのバージョンなど)

macOS11.3.1
tcl-tk: stable 8.6.11 (bottled) keg-only
python3.9.1

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

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

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

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

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

miraimirai

2021/05/11 22:14 編集

pyenvにpython3.9.1をインストールしています。
guest

回答2

0

自己解決

https://stackoverflow.com/questions/60469202/unable-to-install-tkinter-with-pyenv-pythons-on-macos
TL;DR set the env. vars. mentioned in tcl-tk's caveats and this GitHub comment when installing new Pythons via pyenv to get tkinter.から始まる回答を実行すると8.6と表示されました。

投稿2021/05/15 08:52

miraimirai

総合スコア39

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

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

0

インストールだけなら

plain

1PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" pyenv install 3.9.1

でよさそうですが。
(tkinterの挙動がこれでいいのかという感じはします)


tcl-tk回りで苦労するならCPythonの公式バイナリの方がいいのでは、とも思います。

投稿2021/05/12 00:14

quickquip

総合スコア11055

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

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

miraimirai

2021/05/12 02:29

上記のコードを実行して python -m tkinterを実行すると Traceback (most recent call last): File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 87, in _run_code exec(code, run_globals) File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__main__.py", line 7, in <module> main() File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py", line 4553, in _test root = Tk() File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py", line 2264, in __init__ self._loadtk() File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py", line 2280, in _loadtk raise RuntimeError("tk.h version (%s) doesn't match libtk.a version (%s)" RuntimeError: tk.h version (8.6) doesn't match libtk.a version (8.5) というエラーが出ました
quickquip

2021/05/12 02:57 編集

pyenvのバージョン(pyenv -v の結果)と、pyenvをどうセットアップしたのかが知りたいです。質問を編集してください。 tcl-tk もどうセットアップしたのか、書いてもらった方がいいかもしれません。 PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" pyenv install 3.9.1 の実行結果も全部見たいように思います。
miraimirai

2021/05/12 04:34

❯❯❯ pyenv -v pyenv 1.2.23 pyenvをセットアップした方法はすみませんが覚えていません。 tcl-tkはhomebrewでインストールしたものを載せてます。 実行結果は以下の通りです。 ❯❯❯ PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" pyenv install 3.9.1 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.9.1.tar.xz... -> https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz Installing Python-3.9.1... python-build: use readline from homebrew python-build: use zlib from xcode sdk Installed Python-3.9.1 to /usr/local/var/pyenv/versions/3.9.1 ❯❯❯ python -m tkinter Traceback (most recent call last): File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 87, in _run_code exec(code, run_globals) File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__main__.py", line 7, in <module> main() File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py", line 4553, in _test root = Tk() File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py", line 2264, in __init__ self._loadtk() File "/usr/local/var/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py", line 2280, in _loadtk raise RuntimeError("tk.h version (%s) doesn't match libtk.a version (%s)" RuntimeError: tk.h version (8.6) doesn't match libtk.a version (8.5)
quickquip

2021/05/12 04:48

otool -L /usr/local/var/pyenv/versions/3.9.1/lib/python3.9/lib-dynload/_tkinter.cpython-39-darwin.so するとどうなりますか?
miraimirai

2021/05/12 04:55

実行結果は以下の通りです。 ❯❯❯ otool -L /usr/local/var/pyenv/versions/3.9.1/lib/python3.9/lib-dynload/_tkinter.cpython-39-darwin.so error: /Library/Developer/CommandLineTools/usr/bin/otool-classic: can't open file: /usr/local/var/pyenv/versions/3.9.1/lib/python3.9/lib-dynload/_tkinter.cpython-39-darwin.so (No such file or directory)
quickquip

2021/05/12 05:17 編集

ファイルが思ったところにないですね…… otool -L `python -c 'import _tkinter; print(_tkinter.__file__)'` はどうでしょう [どこか]pyenv/versions/3.9.1/lib/python3.9/lib-dynload/_tkinter.cpython-39-darwin.so: /usr/local/opt/tcl-tk/lib/libtcl8.6.dylib (compatibility version 8.6.0, current version 8.6.11) /usr/local/opt/tcl-tk/lib/libtk8.6.dylib (compatibility version 8.6.0, current version 8.6.11) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5) となってなくて別の場所のtk8.5が紐付いているんでしょうか。 (現状確認だけですが)
quickquip

2021/05/12 08:44

ファイルが欠けていたりしないか確認できるように、こちらの手元のHomebrewでインストールした /usr/local/opt/tcl-tk/lib の中身を書いておきます。 % ls /usr/local/opt/tcl-tk/lib Tk.icns libtcl8.6.dylib pkgconfig/ tclConfig.sh tcltls1.7.22/ tdbcpostgres1.1.2/ Tk.tiff libtclstub8.6.a sqlite3.34.0/ tcllib1.20/ tdbc1.1.2/ thread2.8.6/ itcl4.2.1/ libtk8.6.dylib tcl8/ tcllibc/ tdbcmysql1.1.2/ tk8.6/ itk4.1.0/ libtkstub8.6.a tcl8.6/ tclooConfig.sh tdbcodbc1.1.2/ tkConfig.sh
miraimirai

2021/05/12 10:00

実行結果です。 ❯❯❯ otool -L `python -c 'import _tkinter; print(_tkinter.__file__)'` pyenv: version `3.9.1' is not installed (set by /usr/local/var/pyenv/version) error: /Library/Developer/CommandLineTools/usr/bin/otool: at least one file must be specified Usage: /Library/Developer/CommandLineTools/usr/bin/otool [-arch arch_type] [-fahlLDtdorSTMRIHGvVcXmqQjCP] [-mcpu=arg] [--version] <object file> ... -f print the fat headers -a print the archive header -h print the mach header -l print the load commands -L print shared libraries used -D print shared library id name -t print the text section (disassemble with -v) -x print all text sections (disassemble with -v) -p <routine name> start dissassemble from routine name -s <segname> <sectname> print contents of section -d print the data section -o print the Objective-C segment -r print the relocation entries -S print the table of contents of a library (obsolete) -T print the table of contents of a dynamic shared library (obsolete) -M print the module table of a dynamic shared library (obsolete) -R print the reference table of a dynamic shared library (obsolete) -I print the indirect symbol table -H print the two-level hints table (obsolete) -G print the data in code table -v print verbosely (symbolically) when possible -V print disassembled operands symbolically -c print argument strings of a core file -X print no leading addresses or headers -m don't use archive(member) syntax -B force Thumb disassembly (ARM objects only) -q use llvm's disassembler (the default) -Q use otool(1)'s disassembler -mcpu=arg use `arg' as the cpu for disassembly -j print opcode bytes -P print the info plist section as strings -C print linker optimization hints --version print the version of /Library/Developer/CommandLineTools/usr/bin/otool
miraimirai

2021/05/12 10:07

/usr/local/opt/tcl-tk/libでls実行結果も載せておきます ❯❯❯ cd /usr/local/Cellar/tcl-tk/8.6.11_1/lib /u/l/C/t/8/lib ❯❯❯ ls Tk.icns libtk8.6.dylib tclConfig.sh tdbcmysql1.1.2 Tk.tiff libtkstub8.6.a tcllib1.20 tdbcodbc1.1.2 itcl4.2.1 pkgconfig tcllibc tdbcpostgres1.1.2 itk4.1.0 sqlite3.34.0 tclooConfig.sh thread2.8.6 libtcl8.6.dylib tcl8 tcltls1.7.22 tk8.6 libtclstub8.6.a tcl8.6 tdbc1.1.2 tkConfig.sh
quickquip

2021/05/12 10:13

これは3.9.1のビルドが(今たまたま)失敗している状態で実行したのでは……?
miraimirai

2021/05/12 22:42 編集

実行結果です ❯❯❯ otool -L `python -c 'import _tkinter; print(_tkinter.__file__)'` /usr/local/var/pyenv/versions/3.9.1/lib/python3.9/lib-dynload/_tkinter.cpython-39-darwin.so: /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl (compatibility version 8.5.0, current version 8.5.9) /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility version 8.5.0, current version 8.5.9) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
miraimirai

2021/05/13 04:44

編集したので通知行ってなかったらすみません。
quickquip

2021/05/13 05:39

/usr/local/opt/tcl-tk/ は /usr/local/Cellar/tcl-tk/8.6.11_1/ へのシンボリックリンクとしてできているんですよね? (includeの解決ができている以上問題ないとは思いますが) ちょっとなにがどうなっているのか分からなすぎますね……。 ビルドに -v オプションを付けてビルドログを全部眺める以外、できそうなことがありません。 お役に立てず申し訳ないです。 (基本同条件で手元では問題なくビルドできているので不思議です)
miraimirai

2021/05/13 06:02

多分シンボリックリンクだと思います。長時間付き合っていただきありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問