【问题标题】:tcl-tk (tkinter) not installing via Homebrew pyenv on MacOS Mojavetcl-tk (tkinter) 未在 MacOS Mojave 上通过 Homebrew pyenv 安装
【发布时间】:2019-10-15 18:21:46
【问题描述】:

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

$ brew install tcl-tk
$ brew install pyenv
$ pyenv install 3.7.4
$ pyenv global 3.7.4
$ python -m tkinter -c 'tkinter._test()'    

我明白了:

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'

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

提前致谢!

【问题讨论】:

    标签: python tcl homebrew macos-mojave pyenv


    【解决方案1】:

    我从来没有让这个工作。我在this page 以及其他一些网站上花费了大量时间,并且尝试了所有方法。似乎 Homebrew Python 和 Tcl-Tk 目前不是开箱即用的同一版本,这是一个常见问题。我最终所做的是按照@Simba here 的出色说明并排安装pyenv 和anaconda,并且使用Anaconda 我的Tcl-Tk 命令运行良好。在这里发帖以免其他人掉入这个兔子洞,或者如果他们这样做并找到解决方案,很高兴知道。

    【讨论】:

    • 我实际上设法让它在笔记本电脑上运行,但是按照完全相同的说明在我拥有的 iMac 上不起作用。
    【解决方案2】:

    这里是分步指南,让 IDLE 和 tkinter 工作:

    1. 使用 Homebrew 安装 tcl-tk。在 shell 中运行 brew install tcl-tk
    2. 在shell中运行echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' &gt;&gt; ~/.zshrc
    3. 通过退出Terminal 应用程序或运行source ~/.zshrc 重新加载shell
    4. 重新加载后检查tck-tk 是否在$PATH 中。运行echo $PATH | grep --color=auto tcl-tk。结果,您应该会看到您的 $PATH 内容,其中 tcl-tk 突出显示
    5. 现在我们从步骤 #1 的 Homebrew 输出中运行三个命令
      1. 在shell中运行export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
      2. 在shell中运行export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
      3. 在shell中运行export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
    6. 如果你的 Python 版本已经用pyenv 安装,那么用pyenv uninstall &lt;your python version&gt; 卸载它。例如。 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'" 注意:将来使用与 Homebrew 一起实际安装的 tck-tk 版本。在张贴8.6 的那一刻是实际的
    8. 最终使用pyenvpyenv install &lt;version&gt; 安装Python。例如。 pyenv install 3.8.2

    测试

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

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

    就是这样!

    我的环境:

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

    1. macOS 卡塔利娜
    2. zsh(包含在 macOS Catalina 中)= 上面的“shell”
    3. Homebrew(使用 Homebrew 官网的说明安装)
    4. pyenv(根据pyenv来自GitHub的官方自述文件更新了Homebrew和PATH)
    5. Python 3.8.x - 3.9.x(使用pyenv install &lt;version&gt; 命令安装)

    【讨论】:

      【解决方案3】:

      当我尝试通过 pyenv 安装 tkinter 时遇到了同样的问题。尽管@Dribbler 的回答有助于发现anaconda 更兼容,但当我按照@Simba 的说明进行操作时,我仍然收到一条错误消息,指出there is no conda command。 最后,我可以使用以下方法修复它,以防有人遇到同样的问题但仍想坚持使用pyenv

      修复

      1. 我按照@nickolay 的说明安装了tkinter 并设置了正确的路径。

      2. 然后,我使用pyenv install anaconda3-2020.07 命令安装了anaconda3-2020.07。

      3. 因为我使用的是 pyenv python 3.8.6 globally:我导航到我想使用 tkinter 的文件夹并使用 anaconda3-2020.07 locally 命令 @ 987654329@在该特定文件夹中使用此版本的 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 -)"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-07
        • 2019-05-24
        • 2019-03-14
        • 2019-12-25
        • 1970-01-01
        • 2020-06-13
        • 2022-01-04
        • 2019-03-27
        相关资源
        最近更新 更多