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

新手上路,请多包涵

这是我在 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'

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

查看 Python Wiki 中的 Tkinter 部分, 我尝试安装 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 的联系。这有任何意义吗?

原文由 Túlio Chiodi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

这是使 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"' >> ~/.zshrc
  3. 通过退出重新加载 shell Terminal 应用程序或运行 source ~/.zshrc
  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. 如果你的 Python 版本已经安装了 pyenv 然后用 pyenv uninstall <your python version> 卸载它。例如 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'" 注意:将来使用 tck-tk 实际安装 Homebrew 的版本。在发布的那一刻 8.6 是实际的
  8. 最后用 pyenvpyenv install <version> 安装 Python。例如 pyenv install 3.8.2

测试

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

从终端运行的 IDLE 窗口。没有警告

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

tkinter 测试窗口

而已!

我的环境:

检查这是不是执行上面的步骤出了问题:

  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 <version> 命令)

原文由 nickolay 发布,翻译遵循 CC BY-SA 4.0 许可协议

麦克蒙特雷 (M1)

 brew install python-tk

蟒蛇 3.9.10

原文由 Charli Kindly 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题