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

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

我最近花了几个小时让 tkinter 和 IDLE 在我的 pyenv Python 安装 (macOS) 上工作。

你为什么在这里?

  1. 您在 macOS
  2. 上使用 pyenv 管理 Python 个版本
  3. ( 你想要 IDLE - Python 的开发环境 - 在你的 macOS 上工作
  4. 或者您想要 tkinter 模块工作 )

怎么了?

您遇到以下错误之一:

  1. Python may not be configured for Tkimport 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'

这里是 分步指南 让 IDLE 和 tkinter 工作:

  1. 使用 Homebrew 安装 tcl-tk。在shell运行brew install tcl-tk
  2. 在shell运行echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  3. 通过退出 Terminal 应用或 运行 source ~/.zshrc
  4. 重新加载 shell
  5. 重新加载后检查 tck-tk$PATH 中。 运行echo $PATH | grep --color=auto tcl-tk。结果你应该看到你的 $PATH 内容突出显示 tcl-tk
  6. 现在我们 运行 来自步骤 #1 的 Homebrew 输出的三个命令
    1. 在shell运行export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
    2. 在shell运行export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
    3. 在shell运行export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
  7. 如果您的 Python 版本已经通过 pyenv 安装,则使用 pyenv uninstall <your python version> 卸载它。例如。 pyenv uninstall 3.8.2
  8. 设置 python-build 将使用的环境变量。在 shell 运行 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'" 注意:将来使用 tck-tk 实际安装 Homebrew 的版本。在发布时 8.6 是实际的
  9. 最终安装 Python 和 pyenv 以及 pyenv install <version>。例如。 pyenv install 3.8.2

测试

  1. 在shell运行pyenv global <verion that you've just installed>
  2. 现在检查 IDLE。在shell运行idle。您应该看到没有任何警告的 IDLE window 和“以红色打印的文本”。

  1. 现在检查 tkinter。在shell运行python -m tkinter -c "tkinter._test()"。您应该会看到测试 window,如图所示:

就是这样!

我的环境:

检查执行上述步骤是否出了问题:

  1. macOS 卡特琳娜
  2. zsh(包含在 macOS Catalina 中)= "shell" 以上
  3. Homebrew(按照Homebrew官网说明安装)
  4. pyenv(根据 GitHub 的 pyenv 官方自述文件更新了 Homebrew 和 PATH)
  5. Python 3.8.x - 3.9.x(使用 pyenv install <version> 命令安装)

不确定为什么以上内容对我不起作用。头痛数小时后有效的是:

$ brew install python-tk