python-3.x - Python/Tkinter : ModuleNotFoundError: No module named '_tkinter'

标签 python-3.x linux tkinter tcl pyenv

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

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

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

我在 Coursera 上开设了一门关于 DSP(数字信号处理)的类(class),建议安装一个用 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
并且错误保持不变。

我还尝试使用以下代码创建符号链接(symbolic link):%ln -s /usr/lib/python3.8/lib-dynload/_tkinter.cpython-38-x86_64-linux-gnu.so _tkinter.cpython-38-x86_64-linux-gnu.so
符号链接(symbolic link)是在以下文件夹中创建的:
~/.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 的联系。这有任何意义吗?

最佳答案

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

  • 安装 tcl-tk与自制。在 shell 中运行 brew install tcl-tk
  • 在 shell 中运行 echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  • 通过退出重新加载 shell Terminal应用程序或运行 source ~/.zshrc
  • 重新加载后检查 tck-tk$PATH .运行 echo $PATH | grep --color=auto tcl-tk .结果你应该看到你的 $PATH 内容 tcl-tk突出显示
  • 现在我们从第 1 步的 Homebrew 输出中运行三个命令
  • 在 shell 中运行 export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
  • 在 shell 中运行 export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
  • 在 shell 中运行 export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
  • 如果你的 Python 版本已经安装了 pyenv然后用 pyenv uninstall <your python version> 卸载它.例如。 pyenv uninstall 3.8.2
  • 设置将由 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是实际的
  • 最后用 pyenv 安装 Python与 pyenv install <version> .例如。 pyenv install 3.8.2

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

  • IDLE window run from Terminal. No warnings
  • 现在检查 tkinter .在 shell 中运行 python -m tkinter -c "tkinter._test()" .您应该会看到如图所示的测试窗口:

  • tkinter test window

    就是这样!

    我的环境:

    检查这是不是在执行上述步骤时出错:
  • macOS Catalina
  • zsh (包含在 macOS Catalina 中)= 上面的“壳”
  • Homebrew(根据Homebrew官网的说明安装)
  • pyenv (安装 Homebrew 和 PATH 根据 pyenv 来自 GitHub 的官方自述文件更新)
  • python 3.8.x - 3.9.x (使用 pyenv install <version> 命令安装)
  • 关于python-3.x - Python/Tkinter : ModuleNotFoundError: No module named '_tkinter' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59987762/

    相关文章:

    python - 如何从子进程访问子进程 Popen pass_fds 参数?

    python - 对于不同的 CSV 文件获得相同的结果

    python - 制作函数字典

    linux - 在 R 中运行命令后变量意外更改

    linux - 如何从终端在 MacOS 上搜索 ".somefile"?

    python - 按键释放时的 Tkinter <Return> 事件

    python - 在循环外使用生成器

    python - 是否可以将 Canvas 作为按钮的图标?

    tkinter 文本小部件作为 html

    linux - 汇编浮点运算