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

2023-11-24

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

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

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

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

Github 上的链接:短信工具仓库

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

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

%pip install ipython numpy matplotlib scipy cython

我编译了一些C函数“/sms-tools/软件/模型/utilFunctions_C”

目录,使用以下命令:

%python compileModule.py build_ext --inplace

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

%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

and

%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

and

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

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

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

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


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

  1. install tcl-tk与自制。在 shell 中运行brew install tcl-tk
  2. 在外壳中运行echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  3. 通过退出重新加载 shellTerminal应用程序或运行source ~/.zshrc
  4. 重新加载后检查tck-tk is in $PATH. Run echo $PATH | grep --color=auto tcl-tk。结果你应该看到你的 $PATH 内容tcl-tk突出显示
  5. now we run three commands from Homebrew's output from step #1
    1. 在外壳中运行export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
    2. 在外壳中运行export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
    3. 在外壳中运行export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
  6. 如果你已经安装了Python版本pyenv然后卸载它pyenv uninstall <your python version>. E.g. 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. 最后安装Pythonpyenv with pyenv install <version>. E.g. pyenv install 3.8.2

Test

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

IDLE window run from Terminal. No warnings

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

tkinter test window

就是这样!

我的环境:

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

  1. macOS Catalina
  2. zsh(包含在 macOS Catalina 中)=上面的“壳”
  3. Homebrew(按照Homebrew官网的说明安装)
  4. pyenv(随 Homebrew 一起安装,并根据以下内容更新 PATHpyenv来自 GitHub 的官方自述文件)
  5. Python 3.8.x - 3.9.x(安装有pyenv install <version>命令)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块 的相关文章

随机推荐

  • 每行具有动态列数的 GridView

    如何在 a 的帮助下重新创建以下视图GridView 列表中的项目数是动态的 我猜想这不是单个GridView而是多个Layout的组合 只需制作一个 LinearLayout 并根据内容决定您想要在一行中使用哪种布局
  • 尝试通过 FTP 传输带有特殊字符的文件

    我有代码 FtpWebRequest request FtpWebRequest FtpWebRequest Create url request Method WebRequestMethods Ftp DownloadFile requ
  • 如何将联系人或短信作为 .xml 文件或 .csv 文件备份到 SD 卡并在以后恢复

    我正在尝试在我的应用程序中开发一项功能 将短信和联系人以 xml 或 csv 格式备份到 SD 卡 并在以后恢复 所以请任何人给我一些建议或一些示例代码或与此相关的任何资源链接 提前致谢 public ArrayList
  • Django 中 Pisa 的 pdf 生成未渲染 CSS

    我使用 Pisa 从 HTML 生成 pdf 文件 def fetch resources uri rel path os path join settings MEDIA ROOT uri replace settings MEDIA U
  • Sinatra 如何定义和调用 get 方法?

    我很好奇这东西是如何工作的 在需要 sinatra 之后 然后我可以在顶级范围内调用 get 深入研究源代码后 我发现了这个 get 结构 module Sinatra class lt lt self def get end end en
  • strstr 的纯字节版本?

    是否有一个 strstr 版本可以在可能包含空字符的固定长度内存上工作 我可以这样表达我的问题 strncpy 与 memcpy 的关系与 strstr 的关系相同 memmem 不幸的是它是 GNU 特定的而不是标准 C 但是 它是开源的
  • 通过名称模糊匹配创建唯一 ID(通过使用 R 的 agrep)

    使用 R 我尝试匹配按年份和城市构建的数据集中的人名 由于一些拼写错误 不可能进行精确匹配 因此我尝试使用 agrep 来模糊匹配名称 数据集的样本块的结构如下 df lt data frame matrix c 1200013 12000
  • 你能用 Go 在内存中“固定”一个对象吗?

    我有一个 Go 对象 我希望其在内存中的地址保持不变 在 C 中 我们可以固定对象在内存中的位置 Go 有办法做到这一点吗 您保留引用的对象不会移动 没有句柄或间接寻址 您获得的地址是永久的 From 文档 请注意 与 C 不同 返回 a
  • 有什么更快的方法可以找到“幸运三元组”的数量?

    我正在研究一个代码挑战问题 寻找幸运三元组 幸运三重 被定义为 在列表中lst 对于三元组的任意组合 lst i lst j lst k where i lt j lt k where lst i divides lst j and lst
  • 具有 ECDHE 密钥和证书的服务器无法正常工作

    我使用下面的 server c 源代码 我生成了 sinful host cert pem sinful host key 如此处所述 椭圆曲线 CA 指南 运行程序时出现以下错误 140722397161136 错误 10071065 椭
  • 在 ggplot 中展开分类 x 轴

    我不知道如何使用expand within scale x discrete 扩展分类 x 轴 以便将标签放置在点的右侧不会脱离绘图 我知道如果 x 是数字 我可以简单地调整 x 的最大限制 以便所有点都向左移动 但是 我无法弄清楚如何使用
  • SQL Server 导入向导将 NULL 视为文字字符串“NULL”

    当我尝试导入 csv以逗号分隔的平面文件转换为Microsoft SQL server 2008R2 64 bit instance for string列aNULL原始数据变成文字字符串 NULL 并在一个numeric列我收到导入错误
  • 内存警告 UIImagepickerController IOS 7

    任何人都可以帮助我解决这个问题吗 我对 Objective C 和 iOS 有点陌生 我一直在研究它 但我不知道如何解决这个问题 我的应用程序非常简单 它只启动相机拍照并通过电子邮件将它们发送到我们的服务器 这段代码在 iOS6 中运行得很
  • jQuery Mobile 导航还是更改页面?

    随着 jQuery Mobile 1 3 的到来 navigate 已添加功能 我听说这是更改页面的推荐方法 而且它们似乎解决了页面之间传输数据的问题 问题是 既然它已经被简化了 我如何访问其他选项changePage提供 我真的很想使用的
  • mongodb 归档格式是什么?

    我已经使用它们的存档选项备份了一些 mongoDB 但我不能简单地解压它们 当我执行一些步骤来解压缩数据时 存档看起来像是一个大文件中的整个数据库 我想获取各个收藏的文件 有没有办法做到这一点 tar xvf valk archive ta
  • 如何将网址中的双斜杠/多斜杠替换为单斜杠

    我有一个像这样的网址 http 127 0 0 1 7000 test test index html 预期输出 http 127 0 0 1 7000 test test index html 我使用这个正则表达式 http 2 输出是
  • 我的 Rails Javascript 清单文件既不编译也不包含任何所需的文件

    我看过一些与此类似的帖子 但没有解决方案 所以我想我会提出一个更有记录的问题 我的问题清单文件中的 JS 不包含或编译任何 JS 当在本地运行我的服务器并打开 JS 文件时 我看不到任何编译内容 只有标准的 application js 清
  • 在 Objective-C 中,在每个类中导入相同的头文件会使编译时间更长吗?

    我是 Objective C iOS 编程的初学者 我想制作一个头文件 其中包含我在项目中使用的所有类头 并在每个类头文件中导入头文件 就像这个问题 在同一个头文件中包含多个类 但这种方法会增加编译时间吗 或者还有什么其他的缺点吗 请告诉我
  • func_num_args、func_get_arg 和 func_get_args 从 php 5.2 到 5.3 的行为差异

    我看过PHP手册 但我不明白 PHP 早期版本和更高版本之间的行为差 异 我不明白这个说法 由于该函数依赖于当前作用域来确定参数详细信息 因此在 5 3 0 之前的版本中不能将其用作函数参数 如果必须传递该值 则应将结果分配给一个变量 然后
  • Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块

    这是我在 StackOverflow 上发表的第一篇文章 我会尽力使其尽可能正确和完整 如果您有任何改进我的文章的建议 我会很乐意接受 我在运行使用 Tkinter 的 Python 编写的代码时遇到问题 我将尝试详细描述我的操作 以便于识