python-3.x - 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 的联系。这有任何意义吗?
解决方案
这是使空闲和工作的分步指南。tkinter
在 macOS Catalina 上为我工作。应该很容易适应Linux环境:
tcl-tk
使用 Homebrew安装。在 shell 运行中brew install tcl-tk
- 在外壳运行
echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
Terminal
通过退出应用程序或运行重新加载 shellsource ~/.zshrc
- 重新加载后检查
tck-tk
是在$PATH
. 运行echo $PATH | grep --color=auto tcl-tk
。结果,您应该看到您的 $PATH 内容tcl-tk
突出显示 - 现在我们从步骤 #1 的 Homebrew 输出中运行三个命令
- 在外壳运行
export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
- 在外壳运行
export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
- 在外壳运行
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
最后用with安装 Pythonpyenv install <version>
。例如pyenv install 3.8.2
测试
- 在外壳运行
pyenv global <verion that you've just installed>
- 现在检查空闲。在 shell 中运行
idle
。您应该会看到没有任何警告的 IDLE 窗口和“以红色打印的文本”。
- 现在检查
tkinter
。在 shell 中运行python -m tkinter -c "tkinter._test()"
。您应该会看到如图所示的测试窗口:
而已!
我的环境:
检查执行上述步骤是否出现问题:
- macOS 卡塔利娜
zsh
(包含在 macOS Catalina 中)=上面的“shell”- Homebrew(使用 Homebrew 官方网站的说明安装)
pyenv
(安装 Homebrew 和 PATH 根据pyenv
GitHub 的官方自述文件更新)- Python
3.8.x
-3.9.x
(使用pyenv install <version>
命令安装)
推荐阅读
- bit-manipulation - 确定进位时如何应用异或?
- ios - CollectionView 未按预期垂直显示
- java - Minecraft Java 1.12.2 服务器 Spigot 插件错误
- android - Android Studio 3.6 无法通过拖放放置布局
- mongodb - Mongo - 查询,嵌入式文档不匹配,除了点符号
- ftp - Fuse 支持访问 FTP 的文件系统
- php - 我使用了 laravel groupBy,但我试图按有许多分组项目的位置对结果进行排序
- javascript - 地理服务器和传单 GetFeatureInfo
- jquery - 如何在 Jenkins 上运行的 Karma 单元测试中解决此错误:“找不到变量:jQuery”
- python - 两个 Numpy 数组的元素比较