无法使用 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 Tk
import 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"
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
是实际的
最终使用pyenv
和pyenv 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'的主要内容,如果未能解决你的问题,请参考以下文章
无法在 MacOS 上使用 pyenv Python 安装 tkinter