安装了使用pyenv安装的Python 3之后,无法导入tkinter

15

我在使用 pyenv 安装了 Python 3.4.2 版本后,导入 tkinter 发生了问题。我的系统 Python 版本是 2.7.6。我正在使用 Ubuntu 14.04。以下是示例脚本 t.py:

import _tkinter

print ("Hello")

我理解为:

$ pyenv global system
$ python --version
Python 2.7.6
$ python t.py
Hello
$ pyenv global 3.4.2
$ python --version
Python 3.4.2
$ python t.py
Traceback (most recent call last):
  File "t.py", line 3, in <module>
    import _tkinter
ImportError: No module named '_tkinter'
    Traceback (most recent call last):
      File "t.py", line 3, in <module>
        import _tkinter
    ImportError: No module named '_tkinter'

请注意,pyenv 将 Python 3.4.2 版本安装在 ~/.pyenv/versions/3.4.2/ 中。


除非你知道自己在做什么,否则不要导入私有模块。 - simonzack
@simonzack tkinter是一个私有模块吗? - Håkon Hægland
在这种情况下,是的,以 _ 为前缀的名称作为惯例意味着它们是私有的。 - simonzack
1
我刚刚按照 https://wiki.python.org/moin/TkInter 上的说明进行操作。它说你应该首先尝试导入 _tkinter,而不带下划线的导入 tkinter 也不起作用。 - Håkon Hægland
你可能没有正确使用pyenv。虽然很难说为什么,但是可以尝试不使用pyenv来解决问题。 - simonzack
显示剩余2条评论
3个回答

35

这个问题似乎可以使用以下 帖子 中描述的方法来解决:

  • 首先卸载 Python 3.4.2: pyenv uninstall 3.4.2,然后
  • 运行 sudo apt-get install tk-dev
  • 然后重新安装 Python 3.4.2: pyenv install 3.4.2

2
在Centos中,您必须使用以下命令安装tkintersudo yum install python34-tk* - Ala' Alnajjar
1
太棒了!无需设置环境变量! - Fábio
1
这对我有用,尽管我不明白为什么我必须先卸载Python,然后安装tk,再重新安装。 - user1099123
在 Arch 上,使用 sudo pacman -S tk 这个步骤对我很有帮助(通过 pyenv 安装的 Python 3.9.12)。 - FObersteiner

1

对于MacOS,您可以尝试通过Homebrew安装tcl-tk,然后激活其警告部分提到的环境变量,如this answer中所述。


0

将您的代码更改为:

import tkinter

文档链接

大多数情况下,tkinter是您真正需要的,但还有许多其他附加模块可用。Tk界面位于名为 _tkinter 的二进制模块中。该模块包含与Tk的低级接口,并且应该永远不会被应用程序员直接使用。它通常是共享库(或DLL),但在某些情况下可能会与Python解释器静态链接。


它仍然不起作用。请参阅 https://wiki.python.org/moin/TkInter 中的第1步。它说您应该首先尝试导入 _tkinter - Håkon Hægland
@HåkonHægland 这是为了测试安装。 - simonzack
@simonzack 是的,那正是我想做的事情...测试安装...我从不在我的常规代码中使用 import _tkinter - Håkon Hægland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接