如何在 xubuntu 20.04 上安装适用于 python 3.9 的 tkinter?

sau*_*atz 2 xubuntu python

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

sudo apt install python3.9-tk
Run Code Online (Sandbox Code Playgroud)

我收到消息

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.
Run Code Online (Sandbox Code Playgroud)

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

更新

根据 ubfan1 的建议,我尝试过

dpkg-reconfigure python3-tk
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.9/tkinter/__init__.py'
Run Code Online (Sandbox Code Playgroud)

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

sudo apt install python3-tk
Run Code Online (Sandbox Code Playgroud)

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

_tkinter.cpython-38-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)

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

从 tkinter 在 python 3.9 下运行的意义上来说,这似乎有效,但我几乎不用说我对此感到不太舒服。当我升级到 python 3.10 时会发生什么?

dra*_*fly 7

因为您安装的新 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/