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) 上工作。
你为什么在这里?
- 您在 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'
这里是 分步指南 让 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'"
注意:将来使用 tck-tk
实际安装 Homebrew 的版本。在发布时 8.6
是实际的
- 最终安装 Python 和
pyenv
以及 pyenv install <version>
。例如。 pyenv install 3.8.2
测试
- 在shell运行
pyenv global <verion that you've just installed>
- 现在检查 IDLE。在shell运行
idle
。您应该看到没有任何警告的 IDLE window 和“以红色打印的文本”。
- 现在检查
tkinter
。在shell运行python -m tkinter -c "tkinter._test()"
。您应该会看到测试 window,如图所示:
就是这样!
我的环境:
检查执行上述步骤是否出了问题:
- macOS 卡特琳娜
zsh
(包含在 macOS Catalina 中)= "shell" 以上
- Homebrew(按照Homebrew官网说明安装)
pyenv
(根据 GitHub 的 pyenv
官方自述文件更新了 Homebrew 和 PATH)
- Python
3.8.x
- 3.9.x
(使用 pyenv install <version>
命令安装)
不确定为什么以上内容对我不起作用。头痛数小时后有效的是:
$ brew install python-tk
我最近花了几个小时让 tkinter
和 IDLE 在我的 pyenv
Python 安装 (macOS) 上工作。
你为什么在这里?
- 您在 macOS 和 上使用
- ( 你想要 IDLE - Python 的开发环境 - 在你的 macOS 上工作
- 或者您想要
tkinter
模块工作 )
pyenv
管理 Python 个版本
怎么了?
您遇到以下错误之一:
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'
这里是 分步指南 让 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"
- 在shell运行
- 如果您的 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'"
注意:将来使用tck-tk
实际安装 Homebrew 的版本。在发布时8.6
是实际的 - 最终安装 Python 和
pyenv
以及pyenv install <version>
。例如。pyenv install 3.8.2
测试
- 在shell运行
pyenv global <verion that you've just installed>
- 现在检查 IDLE。在shell运行
idle
。您应该看到没有任何警告的 IDLE window 和“以红色打印的文本”。
- 现在检查
tkinter
。在shell运行python -m tkinter -c "tkinter._test()"
。您应该会看到测试 window,如图所示:
就是这样!
我的环境:
检查执行上述步骤是否出了问题:
- macOS 卡特琳娜
zsh
(包含在 macOS Catalina 中)= "shell" 以上- Homebrew(按照Homebrew官网说明安装)
pyenv
(根据 GitHub 的pyenv
官方自述文件更新了 Homebrew 和 PATH)- Python
3.8.x
-3.9.x
(使用pyenv install <version>
命令安装)
不确定为什么以上内容对我不起作用。头痛数小时后有效的是:
$ brew install python-tk