简体   繁体   中英

Can't run IDLE with pyenv installation: `Python may not be configured for Tk` `ModuleNotFoundError: No module named _tkinter'

I recently spent couple hours making tkinter and IDLE work on my pyenv Python installation (macOS).

Why you are here?

  1. You manage Python versions with pyenv on macOS and
  2. ( You want IDLE - the development environment for Python - work on your macOS
  3. or you want tkinter module work )

What's wrong?

You get one of the following errors:

  1. Python may not be configured for Tk on import tkinter
  2. import _tkinter # If this fails your Python may not be configured for Tk
  3. RuntimeError: tk.h version (8.6) doesn't match libtk.a version (8.5)
  4. ModuleNotFoundError: No module named '_tkinter'

Here is step by step guide to make IDLE and tkinter work:

  1. install tcl-tk with Homebrew. In shell run brew install tcl-tk
  2. in shell run echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  3. reload shell by quitting Terminal app or run source ~/.zshrc
  4. after reloaded check that tck-tk is in $PATH . Run echo $PATH | grep --color=auto tcl-tk echo $PATH | grep --color=auto tcl-tk . As the result you should see your $PATH contents with tcl-tk highlighted
  5. now we run three commands from Homebrew's output from step #1
    1. in shell run export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
    2. in shell run export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
    3. in shell run export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
  6. if you have your Python version already installed with pyenv then uninstall it with pyenv uninstall <your python version> . Eg pyenv uninstall 3.8.2
  7. set environment variable that will be used by python-build . In shell run export 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'" Note: in future use tck-tk version that actually installed with Homebrew. At the moment of posting 8.6 was the actual
  8. finally install Python with pyenv with pyenv install <version> . Eg pyenv install 3.8.2

Test

  1. in shell run pyenv global <verion that you've just installed>
  2. now check IDLE. In shell run idle . You should see IDLE window without any warnings and "text printed in red".

IDLE 窗口从终端运行。没有警告

  1. now check tkinter . In shell run python -m tkinter -c "tkinter._test()" . You should see test window like on the image:

tkinter 测试窗口

That's it!

My environment:

check this is something went wrong executing steps above:

  1. macOS Catalina
  2. zsh (included in macOS Catalina) = "shell" above
  3. Homebrew (installed with instructions from Homebrew official website)
  4. pyenv (installed with Homebrew and PATH updated according to pyenv official readme from GitHub)
  5. Python 3.8.x - 3.9.x (installed with pyenv install <version> command)

Not sure why the above didn't work for me. What did work after hours of headache was:

$ brew install python-tk

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM