如何在 xubuntu 20.04 上为 python 3.9 安装 tkinter?

如何在 xubuntu 20.04 上为 python 3.9 安装 tkinter?

我刚刚安装了 python 3.9,但它显然没有自带 tkinter。当我尝试

sudo apt install python3.9-tk

我明白了

Note, selecting 'python3-tk' instead of 'python3.9-tk'
python3-tk is already the newest version (3.8.10-0ubuntu1~20.04).
0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.

Python 3.8 是系统默认的。如何获取适用于 Python 3.9 的 tkinter?

更新

根据 ubfan1 的建议,我尝试过

dpkg-reconfigure python3-tk

但我得到了错误

FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.9/tkinter/__init__.py'

我创建了一个 tkinter 目录,并为 dpkg 抱怨的每个文件添加了空文件。(据我所知,tkinter 目录中的每个文件都是如此。)然后dpkg-reconfigure运行没有错误,所以我尝试了

sudo apt install python3-tk

再次,我得到了与上面相同的消息,告诉我最新的包已经安装。我能够在 python 3.9 中导入 tkinter,但root=tkinter.Tk()失败了。经检查,中的所有文件/usr/lib/python/仍然是空的,所以我决定从 python 3.8 复制所有脚本。这次,python 告诉我no module named _tkinter。我找到了一个名为

_tkinter.cpython-38-x86_64-linux-gnu.so

/usr/lib/python3.8/lib-dynload并将其复制到其中/usr/lib/python3.9/lib-dynload,将名称中的“38”替换为“39”。

从 tkinter 在 python 3.9 下运行的角度来看,这似乎有效,但我几乎不用说我对此并不完全满意。当我升级到 python 3.10 时会发生什么?

答案1

由于您安装了比系统或存储库中的版本更新的 Python 版本,或者将其安装到不同于usr/lib/python3.x(在我的情况下为usr/local/lib/python3.9.4)的位置,因此安装该包 python3-tk不会直接帮助您。

要解决这个问题,首先你需要搜索正确的python3-tk.*deb文件。一个可以搜索的地方是pkgs.org。就我而言,我使用的是 python3.9.4,所以我能找到的最新文件是python3-tk_3.9.2-1_amd64.deb

只要它与第二个次版本号匹配,它就能正常工作。

然后,下载该 deb 文件后,使用任何存档管理器将其解压。继续解压data.tar.xz里面的内容。

然后,导航到data/usr/lib/python3.9/lib-dynload/,您将看到有一个预先构建的共享库文件_tkinter.cpython-39-x86_64-linux-gnu.so

最后,您要做的就是将该文件复制到 Python 安装的正确文件夹中。 在我的例子中,它是/usr/local/lib/python3.9/lib-dynload/

相关内容