【问题标题】:Python/Tkinter : ModuleNotFoundError: No module named '_tkinter'Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块
【发布时间】:2020-01-30 14:03:04
【问题描述】:

这是我在 StackOverflow 上的第一篇帖子,如果您有任何改进我的帖子的建议,我会尽量使其正确和完整,我很乐意接受。

我在运行使用 Tkinter 的 Python 编写的代码时遇到问题。

我将尝试详细描述我的操作,以便于识别错误。

我在 Coursera 开设了一门关于 DSP(数字信号处理)的课程,建议安装一个用 python(和一点点 C)编写的工具。我正在使用 Arch Linux。

Github 上的链接: sms-tools repo

使用 pyenv/virtualenv/virtualenvwrapper 我使用 Python 3.7.5 创建了一个环境,如存储库的“如何使用”部分中的建议。

我通过 pip 在我的环境中安装了所需的库:

%pip install ipython numpy matplotlib scipy cython

我在“/sms-tools/software/models/utilFunctions_C”中编译了一些C函数

使用以下命令的目录:

%python compileModule.py build_ext --inplace

最后,我在目录“/sms-tools/software/models_interface”中运行模型GUI

%python models_GUI.py

我收到以下消息:

Traceback (most recent call last):
  File "models_GUI.py", line 6, in <module>
    from Tkinter import *   ## notice capitalized T in Tkinter 
ModuleNotFoundError: No module named 'Tkinter'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "models_GUI.py", line 9, in <module>
    from tkinter import *   ## notice lowercase 't' in tkinter here
  File "~/.pyenv/versions/3.7.5/lib/python3.7/tkinter/__init__.py", line 36, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

我现在将描述我解决问题的一些尝试:

看着Tkinter section in Python Wiki我尝试安装Tcl和Tk。

%sudo pacman -S tk

但它已经安装了。之后我尝试使用 pip 安装:

%pip install tk

%pip install tkinter

错误依旧。

我还尝试使用以下代码创建符号链接: %ln -s /usr/lib/python3.8/lib-dynload/_tkinter.cpython-38-x86_64-linux-gnu.so _tkinter.cpython-38-x86_64-linux-gnu.so

符号链接是在以下文件夹中创建的:

~/.ve/Coursera_DSP/lib/python3.7/lib-dynload

.pyenv/versions/3.7.5/lib/python3.7/lib-dynload

但我仍然遇到同样的错误。

如果有人有任何建议,我将不胜感激,对于语言错误,我深表歉意,因为英语不是我的母语。

在网上不断搜索后,我认为问题与pyenv和TCL/TK有关。 我对这个主题不太了解,但我怀疑在 virtualenv 创建环境时,python 已经失去了与 TCL/TK 的联系。这有意义吗?

【问题讨论】:

  • 观察:tkinter 需要是 Python 安装的一部分,不能通过 pip 安装。
  • 你不需要将tkinter从外部安装到python中,它是一个内置库。其次,我在您发布的错误中看到您在程序中的某处使用Tkinter 和大写T,而您应该使用tkinter 和小t
  • @DaniyalAhmad 这是一个错误处理程序,它会为 python 2.x 尝试 Tkinter,如果失败,它会为 python 3.x 尝试 tkinter
  • @DaniyalAhmad Tkinter 通常(例如,在 Linux 中,或带有 MacPorts 或 Homebrew 的 mac OS 中)作为 Python 的单独包安装。包的确切名称各不相同。 重要的事情是在构建任何虚拟环境之前进行设置,因为 tkinter 的包装很奇怪。 (这比 Tcl/Tk 本身要复杂得多,它们很容易作为用户重新定位和安装,无需特殊技巧。)

标签: python-3.x linux tkinter tcl pyenv


【解决方案1】:

这里是分步指南,让 IDLE 和 tkinter 工作。在 macOS Catalina 上为我工作。应该很容易适应Linux环境:

  1. 使用 Homebrew 安装 tcl-tk。在 shell 中运行 brew install tcl-tk
  2. 在shell中运行echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' &gt;&gt; ~/.zshrc
  3. 通过退出Terminal 应用程序或运行source ~/.zshrc 重新加载shell
  4. 重新加载后检查tck-tk 是否在$PATH 中。运行echo $PATH | grep --color=auto tcl-tk。结果,您应该会看到您的 $PATH 内容,其中 tcl-tk 突出显示
  5. 现在我们从步骤 #1 的 Homebrew 输出中运行三个命令
    1. 在shell中运行export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
    2. 在shell中运行export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
    3. 在shell中运行export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
  6. 如果你已经用pyenv 安装了你的Python 版本,那么用pyenv uninstall &lt;your python version&gt; 卸载它。例如。 pyenv uninstall 3.8.2
  7. 设置python-build 将使用的环境变量。在 shell 中运行 PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" 注意:将来使用与 Homebrew 一起实际安装的 tck-tk 版本。在张贴8.6 的那一刻是实际的
  8. 最终使用pyenvpyenv install &lt;version&gt; 安装Python。例如。 pyenv install 3.8.2

测试

  1. 在shell中运行pyenv global &lt;verion that you've just installed&gt;
  2. 现在检查空闲。在 shell 中运行 idle。您应该会看到没有任何警告的 IDLE 窗口和“以红色打印的文本”。

  1. 现在检查tkinter。在 shell 中运行 python -m tkinter -c "tkinter._test()"。您应该会看到如图所示的测试窗口:

就是这样!

我的环境:

检查执行上述步骤是否有问题:

  1. macOS 卡塔利娜
  2. zsh(包含在 macOS Catalina 中)= 上面的“shell”
  3. Homebrew(使用 Homebrew 官网的说明安装)
  4. pyenv(根据pyenv来自GitHub的官方自述文件更新了Homebrew和PATH)
  5. Python 3.8.x - 3.9.x(使用pyenv install &lt;version&gt; 命令安装)

【讨论】:

  • 为了使步骤 7 中的 env var 生效,步骤 7 和 8 应该在同一命令上完成,即PYTHON_CONFIGURE_OPTS=“—with-tcltk-includes=‘-I/usr/local/opt/tcl-tk/include’ —with-tcltk-libs=‘-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6’” pyenv install 3.8.2
【解决方案2】:

我的 linux mint 20 基本安装包含 python3。 在 Windows 机器上,这包括 tkinter 包。 我的解决方案是

sudo apt-get install python-tk

sudo apt-get install python3-tk

生活又是晴天。

【讨论】:

    【解决方案3】:

    由于我找不到任何解决方案,我只是卸载了我的整个环境系统(pyenv pyenv-virtualenv virtualenv 和 virtualenvwrapper)并安装了 conda。现在一切正常。 可能我搞砸了 pyenv 安装。

    谢谢大家:D

    【讨论】:

    • 在工作中,我们建议在构建任何虚拟环境之前安装 tkinter 等组件。对于一些奇怪的平台,我们也有相当多的解决方法。好吧,实际上,所有平台有时都很奇怪……
    【解决方案4】:

    对于未来遇到此问题的人...

    我正在使用 Catalina,但遇到了错误:

    ModuleNotFoundError: 没有名为“_tkinter”的模块

    尝试导入某些模块时。例如,我在尝试导入 pdf2docx 时会收到错误消息,即使它安装正常。

    我卸载了所有版本的 python 3.x 并按照上面 nickolay 的分步建议进行操作。

    现在它就像一个魅力!谢谢尼克莱!

    【讨论】:

    • 这在很大程度上只是一个“谢谢”帖子。最多应该是the accepted answer下的评论。
    【解决方案5】:

    麦克蒙特雷 (M1)

    brew install python-tk
    

    python 3.9.10

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 2021-04-09
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多