WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable
I'm running macOS Sierra 10.12.2 and am trying to get Python's IDLE to work properly with Tcl/Tk. This is the error message I'm getting when I open IDLE:
Python 2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit http://www.python.org/download/mac/tcltk/ for current information.
Visiting the link in the error message, I read the documentation and installed Tcl/Tk version 8.5.18.0 from this source. Perhaps it is important to note that I'm running a brew
install of Python 2.7.13. After I installed the DMG for 8.5.18.0, the bash terminal and Python are not recognizing the Tcl/Tk upgrade (Note that it is recognizing Tcl/Tk (8.5.9) instead of 8.5.18.0. How can I get IDLE and the upgraded python install from homebrew to recognize the upgraded Tcl/Tk 8.5.18.0? In other words, how can I resolve the warning message?
Solution 1:
According to this Python Software Foundation page:
The Python for Mac OS X installers downloaded from this website dynamically link at runtime to Tcl/Tk macOS frameworks. The Tcl/Tk major version is determined when the installer is created and cannot be overridden. The Python 64-bit/32-bit Mac OS X installers for Python 3.6.x, 3.5.x, and 2.7.x dynamically link to Tcl/Tk 8.5 frameworks. 32-bit-only Python installers for Mac OS X dynamically link to Tcl/Tk 8.4 frameworks.
In either case, the dynamically linking occurs when tkinter (Python 3) or Tkinter (Python 2) is first imported (specifically, the internal _tkinter C extension module). By default, the macOS dynamic linker looks first in /Library/Frameworks for Tcl and Tk frameworks with the proper major version. This is the standard location for third-party or built from source frameworks, including the ActiveTcl releases. If frameworks of the proper major version are not found there, the dynamic linker looks for the same version in /System/Library/Frameworks, the location for Apple-supplied frameworks shipped with macOS. (Note, you should normally not modify or delete files in /System/Library.)
Source: Look for the How Python Chooses Which Tk Library To Use subheading on https://www.python.org/download/mac/tcltk/#activetcl-8-5-18-0
Because of this, I am 99.9% certain that now you have updated to Tcl/Tk 8.5.18.0, what you need to do is to re-install Python 2.7.13.
The reason I believe this will resolve your issue is that upon reading the info I quoted, it's clear the Tcl/Tk version used by Python is chosen during the installation process and cannot be changed without installing Python again.
Solution 2:
2018 Update
System provided python/tcl-tk will always show that error.
You COULD download an updated tcl-tk and an updated python install (need to reinstall python to bind to new tcl-tk - install tcl/tk first!).
My PREFERRED method is using Homebrew.
uninstall development version of tcl-tk
brew uninstall tcl-tk --devel
install tcl-tk
brew install tcl-tk
uninstall python and python3 (tcl-tk binding happens when python is installed, so we need to re-install once we have tcl-tk installed)
brew uninstall python
brew uninstall python3
reinstall python and python 3
brew install python
brew install python3
test
brew test python
brew test python3
test IDLE ("idle" points to system installed python/tcl-tk, we'll no longer use that but might as well leave it there to prevent any future issues)
idle2
idle3
Solution 3:
This solution from Stack Overflow resolved the issue:
brew tap homebrew/dupes
brew install tcl-tk
brew install python --with-tcl-tk