无法使用 pyenv 安装运行 IDLE:`Python 可能没有为 Tk 配置``ModuleNotFoundError: No module named _tkinter'

Posted

技术标签:

【中文标题】无法使用 pyenv 安装运行 IDLE:`Python 可能没有为 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'无法使用 pyenv 安装运行 IDLE:`Python 可能没有为 Tk 配置``ModuleNotFoundError: No module named _tkinter' 【发布时间】:2020-09-04 07:35:17 【问题描述】:

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

你为什么在这里?

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

怎么了?

您收到以下错误之一:

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

【问题讨论】:

【参考方案1】:

不知道为什么上述方法对我不起作用。经过数小时的头痛后起作用的是:

$ brew install python-tk

【讨论】:

Homebrew 如果您打算在您的操作系统上仅使用一个 python 版本,则可以完成这项工作。对于多个 python 版本,例如使用pyenv 管理,您必须超越Homebrew【参考方案2】:

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

    使用 Homebrew 安装 tcl-tk。在 shell 中运行 brew install tcl-tk 在shell中运行echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc 通过退出Terminal 应用程序或运行source ~/.zshrc 重新加载shell 重新加载后检查tck-tk 是否在$PATH 中。运行echo $PATH | grep --color=auto tcl-tk。结果,您应该会看到您的 $PATH 内容,其中 tcl-tk 突出显示 现在我们从步骤 #1 的 Homebrew 输出中运行三个命令
      在shell中运行export LDFLAGS="-L/usr/local/opt/tcl-tk/lib" 在shell中运行export CPPFLAGS="-I/usr/local/opt/tcl-tk/include" 在shell中运行export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
    如果你的 Python 版本已经用pyenv 安装,那么用pyenv uninstall <your python version> 卸载它。例如。 pyenv uninstall 3.8.2 设置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'" 注意:将来使用与 Homebrew 一起实际安装的 tck-tk 版本。在发帖时8.6 是实际的 最终使用pyenvpyenv install <version> 安装Python。例如。 pyenv install 3.8.2

测试

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

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

就是这样!

我的环境:

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

    macOS 卡塔利娜 zsh(包含在 macOS Catalina 中)= 上面的“shell” Homebrew(使用 Homebrew 官网的说明安装) pyenv(根据pyenv来自GitHub的官方自述文件更新了Homebrew和PATH) Python 3.8.x - 3.9.x(使用pyenv install <version> 命令安装)

【讨论】:

在上面的第 7 步中,设置环境变量 PYTHON_CONFIGURE_OPTS 应该以 export 关键字开头,不是吗?否则,这对我很有用。 你们俩都救了我的命。我尝试了其他方法,但没有奏效。 @PapaJoeDee 是对的,我需要将导出添加到第 7 步才能使其正常工作。 我的环境是:Big Sur 11.3.1, Xcode 12.5, Python 3.8.2 Apple clang version 12.0.5 (clang-1205.0.22.9) Target: x86_64-apple-darwin20.4.0 --- - 这拯救了我的一天!非常感谢nickolay。另外,不要跳过任何步骤,这里的任何步骤都是使 tk 工作所必需的。

以上是关于无法使用 pyenv 安装运行 IDLE:`Python 可能没有为 Tk 配置``ModuleNotFoundError: No module named _tkinter'的主要内容,如果未能解决你的问题,请参考以下文章

Python实用环境pyenv搭建教程

无法在 MacOS 上使用 pyenv Python 安装 tkinter

我无法在32位版本的IDLE上导入pygame。

如何在 microsoft windows 10 中使用 pyenv/pyenv-win 安装 python 版本?

HeroVision的入门使用

那能运行Pythonidle的操作系统