如果我在Homebrew的MacOS Mojave上执行此操作:
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'
我得到:
{{1}}
我已经搜索了几天,并尝试了各种解决方案,例如here,但到目前为止还没有运气。为什么我会收到此错误以及如何解决该错误的任何想法?
谢谢!
答案 0 :(得分:2)
我从来没有这个工作。我在this page和许多其他网站上花费了大量时间,并尝试了所有方法。看来Homebrew Python和Tcl-Tk目前并非同一版本,这是一个常见问题。我最终要做的是按照@Simba here的出色说明并排安装pyenv和anaconda,然后使用Anaconda正常运行Tcl-Tk命令。张贴在这里,这样其他人就不会掉进这个兔子洞,或者如果他们找到了解决方案,那真是太好了。
答案 1 :(得分:1)
以下是逐步指南,以使IDLE和tkinter
正常工作:
tcl-tk
。在shell中运行brew install tcl-tk
echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc
Terminal
应用或运行source ~/.zshrc
tck-tk
中是否有$PATH
。运行echo $PATH | grep --color=auto tcl-tk
。结果,您应该看到$ PATH内容突出显示了tcl-tk
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"
pyenv
的Python版本,请使用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
与pyenv install <version>
一起安装Python。例如。 pyenv install 3.8.2
测试
pyenv global <verion that you've just installed>
idle
。您应该看到“ IDLE”窗口,没有任何警告,并且“文本打印为红色”。tkinter
。在shell中运行python -m tkinter -c "tkinter._test()"
。您应该看到如图所示的测试窗口:就是这样!
我的环境:
检查执行上述步骤是否出错:
zsh
(包含在macOS Catalina中)= 上面的“外壳” pyenv
(已根据GitHub上的pyenv
官方自述文件,安装了Homebrew和PATH)3.8.x
-3.9.x
(通过pyenv install <version>
命令安装)答案 2 :(得分:1)
当我尝试通过 pyenv 安装 tkinter
时遇到了同样的问题。虽然@Dribbler 的回答有助于发现 anaconda 更兼容,但当我按照 @Simba 说明进行操作时,我仍然收到一个错误,指出 there is no conda command
。
最后,我可以使用以下方法修复它,以防有人遇到同样的问题但仍想坚持使用 pyenv
。
修复
我按照@nickolay 的说明安装了 tkinter
并以正确的方式设置了路径。
然后,我使用 pyenv install anaconda3-2020.07
命令安装了 anaconda3-2020.07。
因为我使用的是 pyenv python 3.8.6 全局:我导航到我想使用 tkinter 的文件夹并使用了 anaconda3-2020.07
本地通过使用命令 pyenv local anaconda3-2020.07
在该特定文件夹中使用此版本的 pyenv。它运行没有错误!
注意:我在 .bash_profile
中使用以下脚本在 cd 所需目录时自动触发 virtualenv
# manage python version using pyenv
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
# add pyenv virtualenv
eval "$(pyenv virtualenv-init -)"
答案 3 :(得分:0)
当然,它不适用于pyenv
中的Python。
pyenv
是一个Python环境管理器,它支持安装不同版本的Python。从pyenv
安装Python时,pyenv
将下载源代码并将其构建在本地计算机上。
问题在于,pyenv
构建的Python没有将Homebrew安装的tcl-tk
用作依赖项。
您提到的issue已经足够清楚地说明了这一点。您必须通过pyenv
使用特殊的PYTHON_CONFIGURE_OPTS
环境变量来重新安装/重新编译Python,以告诉pyenv
使用Homebrew安装的tcl-tk
作为依赖项。