无法使用 pyenv 安装运行 IDLE:`Python 可能未配置为 Tk``ModuleNotFoundError:没有名为 _tkinter 的模块'

Dad*_*dyM 8 python macos tkinter python-idle pyenv

我最近花了几个小时tkinter在我的pyenvPython 安装 (macOS)上制作和空闲工作。

你为什么在这里?

  1. 您可以pyenv在 macOS 上管理 Python 版本,并且
  2. 你想要 IDLE——Python 的开发环境——在你的 macOS 上工作
  3. 或者你想要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'

Dad*_*dyM 10

以下是制作 IDLE 和工作的分步指南tkinter

  1. tcl-tk用 Homebrew安装。在 shell 中运行brew install tcl-tk
  2. 在 shell 中运行 echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  3. 通过退出Terminal应用程序或运行重新加载外壳source ~/.zshrc
  4. 重新加载后检查tck-tk$PATH. 运行echo $PATH | grep --color=auto tcl-tk。结果,您应该看到tcl-tk突出显示的$PATH 内容
  5. 现在我们从第 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"
  6. 如果您已经安装了 Python 版本,pyenv则使用pyenv uninstall <your python version>. 例如pyenv uninstall 3.8.2
  7. 设置将被使用的环境变量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是实际的
  8. 最后pyenvpyenv install <version>. 例如pyenv install 3.8.2

测试

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

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

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

tkinter 测试窗口

就是这样!

我的环境:

检查这是不是在执行上述步骤时出错:

  1. macOS Catalina
  2. zsh(包含在 macOS Catalina 中)=上面的“shell”
  3. Homebrew(根据Homebrew官网的说明安装)
  4. pyenv(根据pyenvGitHub 的官方自述文件安装了 Homebrew 和 PATH 更新)
  5. Python 3.8.x- 3.9.x(用pyenv install <version>命令安装)

  • 在上面的步骤7中,设置环境变量PYTHON_CONFIGURE_OPTS应该以export关键字开头,不是吗?否则,这对我来说非常有用。 (4认同)