异常信息
macos下通过pyenv安装的python, 在使用turtle库时提示 import _tkinter # If this fails your Python may not be configured for Tk, ModuleNotFoundError: No module named '_tkinter' ,如下所示
Traceback (most recent call last):
File "tom_jerry.py", line 1, in <module>
import turtle
File "/.pyenv/versions/3.12.5/lib/python3.12/turtle.py", line 101, in <module>
import tkinter as TK
File "/.pyenv/versions/3.12.5/lib/python3.12/tkinter/__init__.py", line 38, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'
出现这个异常的原因是python安装的时候当前电脑没有安装tk库,所以在安装python的时候也就不可能编译有tk库的功能。
解决方法:
先安装 tk 库,brew里面应该是 tcl-tk 这个包, macport里面被分为了2个包 tcl, tk , 安装好tk库后再将相应的lib, include, pkconfig路径增加到 LDFLAGS,CPPFLAGS,PKG_CONFIG_PATH环境变量中,这样在重新编译python时才能找到tk库。
brew安装tcl-tk库
brew install tcl-tk
tk库环境变量配置
~/.bash_profile中增加以下内容
# 编译python时能找到tcl-tk设置
export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
# pkg-config找到tcl-tk的配置:
export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
# 这个是tcl-tk的可执行文件添加到系统PATH (可以省略)
export PATH="/usr/local/opt/tcl-tk/bin:$PATH"
# tkinter显示设置
export DISPLAY=":0.0"
生效环境配置: source ~/.bash_profile
重新编译安装python
最后一步就是卸载Python后重新编译安装python即可。 注意这里如果使用的是pyenv安装的python, 仅使用 pyenv uninstall xxx 是不行的, 在执行了uninstall卸载后还必须到 ~/.pyenv/versions 文件夹下面删除对应的安装文件,之后在从新编译才行。
# 这里使用port来安装tk
sudo port install tcl tk tkimg sqlite3-tcl
# 使用pyenv卸载python
pyenv uninstall 3.12.5
# 删除python安装文件
rm -rf ~/.pyenv/versions/3.12.5
# 使用pyenv重新安装python
pyenv install 3.12.5
tk库测试
在执行了上面的3个步骤后,可以通过以下命令测试tk库是否安装配置成功
python -m tkinter -c 'tkinter._test()'
如下图,如果出现tk窗口,说明tk库和python的安装和配置成功!