tkinter 扩展未编译,并且已检测到 GUI 子系统。缺少 Tk 工具包?

S.V*_*S.V 5 python tk-toolkit tkinter build

我正在尝试在 CentOS-7 下安装(通过pyenv )Python-3.11.4。它可以安装,但没有 GUI。我收到以下错误消息:

Installing Python-3.11.4...
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/.../pyenv/versions/3.11.4/lib/python3.11/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'
WARNING: The Python tkinter extension was not compiled and GUI subsystem has been detected. Missing the Tk toolkit?
Installed Python-3.11.4 to /.../pyenv/versions/3.11.4
Run Code Online (Sandbox Code Playgroud)

而Python-3.9.16在同一台机器上安装成功。根据Python 3.11 Build Changes,要求安装“Tcl/Tk 版本 8.5.12 或更高版本”。我有

$ rpm -q tk tk-devel
tk-8.5.13-6.el7.x86_64
tk-devel-8.5.13-6.el7.x86_64
Run Code Online (Sandbox Code Playgroud)

同一页面显示“Tcl/Tk 和 uuid 标志由 pkg-config 检测(如果可用)。tkinter 现在需要 pkg-config 命令来检测 Tcl/Tk 标头和库的开发设置。” ,还安装了:

$ rpm -q pkgconfig
pkgconfig-0.27.1-4.el7.x86_64
Run Code Online (Sandbox Code Playgroud)

您能帮我了解安装失败的原因吗_tkinter

非常感谢您的帮助!

S.V*_*S.V 1

为了在CentOS-7下成功构建Python-3.11.4,需要设置以下环境变量:

export CPPFLAGS="$(pkg-config --cflags openssl11) -I/usr/include"
export LDFLAGS="$(pkg-config --libs openssl11) -L/usr/lib64 -ltcl8.5 -ltk8.5"
Run Code Online (Sandbox Code Playgroud)

其中openssl11部分是模块需要的_ssl,其余部分是_tkinter模块需要的。

使用 Tk/Tcl 构建 Python 所需的部分位于

  • /usr/lib64/tclConfig.sh
  • /usr/lib64/tkConfig.sh

要检查是否tkinter构建成功,请执行以下操作:

/path/to/python/3.11.4/bin/python3 -m tkinter
Run Code Online (Sandbox Code Playgroud)

看来,问题的根本原因是CentOS-7中的rpmtcltk没有提供相应的pkg-config文件:

  • /usr/lib64/pkgconfig/tcl.pc
  • /usr/lib64/pkgconfig/tk.pc

因此必须手动提供相应的信息。