我刚刚安装了 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/
。