使用 asdf 让 tkinter 在 macos 上使用 python 3.x

Non*_*ona 6 python tkinter python-3.x

所以我很困惑。如何让 python 3.7.x 与 tkinter 和 asdf 一起使用?

我做了以下事情:

1)asdf local python 3.7.4

2)brew install tcl-tk

3)brew link tcl-tk --force

4)python -m venv --system-site-packages nltk

我有一些代码,例如:

import nltk
from nltk.corpus import wordnet as wn
from tkinter import *

# Let's get the first sense of vehicle
vehicle = wn.synsets('vehicle')[0]
# Let's build a concept tree
t = nltk.Tree(vehicle.name(), children=[
    nltk.Tree(vehicle.hyponyms()[3].name(), children=[]),
    nltk.Tree(vehicle.hyponyms()[4].name(), children=[]),
    nltk.Tree(vehicle.hyponyms()[5].name(), children=[]),
    nltk.Tree(vehicle.hyponyms()[7].name(), children=[
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[1].name(), children=[]),
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[3].name(), children=[]),
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[4].name(), children=[]),
        nltk.Tree(vehicle.hyponyms()[7].hyponyms()[5].name(), children=[]), nltk.Tree(vehicle.hyponyms()[7].hyponyms()[6].name(), children=[]),
        ]),
    ])
t.draw()
Run Code Online (Sandbox Code Playgroud)

然后,我使用 nltk 库运行包含上述代码的 python 脚本来绘制概念树。我得到以下输出:

Traceback (most recent call last):
  File "concept_tree.py", line 3, in <module>
    from tkinter import *
  File "/Users/alexander/.asdf/installs/python/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'
Run Code Online (Sandbox Code Playgroud)

Kat*_*ine 6

asdf python 在底层使用 pyenv,因此您可以使用所有相同的构建选项。

在 pyenv 中,您需要在安装命令前面添加以下内容才能使用 tkinter 进行安装:

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'"
Run Code Online (Sandbox Code Playgroud)

这也可以放在前面asdf install python 3.7.4

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'" asdf install python 3.7.4
Run Code Online (Sandbox Code Playgroud)

请注意,这需要在全新安装 python 时完成。如果您已经安装了 python,则需要先卸载并重新安装,然后才能使用配置选项运行命令。