关于python:tcl-tk(tkinter)不在MacOS Mojave上通过Homebrew pyenv安装

tcl-tk (tkinter) not installing via Homebrew pyenv on MacOS Mojave

如果我在Homebrew的MacOS Mojave上执行此操作:

1
2
3
4
5
$ brew install tcl-tk
$ brew install pyenv
$ pyenv install 3.7.4
$ pyenv global 3.7.4
$ python -m tkinter -c 'tkinter._test()'

我得到:

1
2
3
4
5
6
7
8
9
10
Traceback (most recent call last):
  File"/Users/craign/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File"/Users/craign/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File"/Users/craign/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File"/Users/craign/.pyenv/versions/3.7.4/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'

我一直在寻找几天,并且尝试了各种解决方案,例如此处,但到目前为止还没有运气。 有什么想法为什么我得到这个错误以及如何解决它?

提前致谢!


我从来没有这个工作。我在此页面以及许多其他网站上花费了大量时间,并尝试了所有方法。看来Homebrew Python和Tcl-Tk目前并非同一版本,这是一个常见问题。我最终要做的是按照@Simba的出色说明并排安装pyenv和anaconda,使用Anaconda可以使我的Tcl-Tk命令正常运行。张贴在这里,这样其他人就不会掉进这个兔子洞,或者如果他们找到了解决方案,那真是太好了。


这是使IDLE和tkinter工作的逐步指南:

  • 用Homebrew安装tcl-tk。在Shell中运行brew install tcl-tk
  • 在shell中运行echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
  • 通过退出Terminal应用程序或运行source ~/.zshrc重新加载Shell
  • 重新加载后,检查$PATH中是否包含tck-tk。运行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"
  • 如果您已经使用pyenv安装了Python版本,请使用pyenv uninstall 卸载它。例如。 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'"
    注意:将来使用与Homebrew一起实际安装的tck-tk版本。在发布8.6时是实际的
  • 最后用pyenv install pyenv安装Python。例如。 pyenv install 3.8.2
  • 测试

  • 在shell中运行pyenv global
  • 现在检查"空闲"。在shell中运行idle。您应该看到没有任何警告的"空闲"窗口和"以红色打印的文本"。
  • IDLE window run from Terminal. No warnings

  • 现在检查tkinter。在shell中运行python -m tkinter -c"tkinter._test()"。您应该在图像上看到测试窗口:
  • tkinter test window

    而已!

    我的环境:

    执行以上步骤,检查这是否出错:

  • macOS卡塔利娜
  • zsh(包括在macOS Catalina中)=上面的" shell"
  • Homebrew(根据Homebrew官方网站上的说明安装)
  • pyenv(已根据GitHub上的pyenv官方自述文件,安装了Homebrew和PATH更新)
  • Python 3.8.x-3.9.x(通过pyenv install 命令安装)