python3でidle3を使うと、次のようにTcl/Tkのバージョンが不安定(非推奨)とメッセージが出る。
WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
調べてみると、idle3が突然、落ちたりすることもあるらしい。
pythonのTcl/Tk使用時に呼ばれるpythonのライブラリと、そのライブラリが依存するTcl/Tkのライブラリを調べてみる
$ python3 -c "import _tkinter; print(_tkinter.__file__)"
/Users/tsuji/anaconda/lib/python3.6/lib-dynload/_tkinter.cpython-36m-darwin.so
$ otool -L $(python3 -c "import _tkinter; print(_tkinter.__file__)")
/Users/tsuji/anaconda/lib/python3.6/lib-dynload/_tkinter.cpython-36m-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 1197.1.1)
$ otool -L /Users/tsuji/anaconda/lib/python3.6/lib-dynload/_tkinter.cpython-36m-darwin.so
/Users/tsuji/anaconda/lib/python3.6/lib-dynload/_tkinter.cpython-36m-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 1197.1.1)
*python -c は""内のPythonコードを実行します
*otool -L は使用しているフレームワークを出力します
どうも、/System/Library/Frameworks を参照しているらしい。
Tcl/Tkのサードパーティ版の最新ActiveTcl8.6.6をインストールすると、
/Library/Frameworks/ 以下の Tcl.framework/ と Tk.framework/ が更新された。
/System/Library/Frameworks以下は更新されていない。
/System/Library/Frameworks以下はAppleが提供するFrameworkのみ設置が可能らしい。
なので、bashでデフォルトで参照するフレームワークのライブラリを、
/System/Library/Frameworks から /Library/Frameworks/ に変えてみる。
.bash_profileに次を追加
export DYLD_FRAMEWORK_PATH="/Library/Frameworks"
idle3を使うと、まだTcl/Tkのバージョンが不安定(非推奨)とメッセージが出る。
/Library/Frameworks/ 以下の Tcl.framework/ と Tk.framework/ を8.6.6から8.5.18に変えて、再インストール。
Python 3.6.1 |Anaconda custom (x86_64)| (default, May 11 2017, 13:04:09)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "copyright", "credits" or "license()" for more information.
やっと、警告が消えた。
どうも、python3.6.1はTcl/Tk8.6には対応していないらしい。
参考サイト:
Re: Getting IDLE to use correct Tcl/Tk on MacOSX 10.6?
Cocoaの日々