Почему мой Python, установленный через домашний кофе, не включает Tkinter
Я установил свой Python с помощью homebrew на Mac.
brew install python
и после этого я проверил свою версию Python как 2.7.11, затем я попытался выполнить
import Tkinter
У меня следующее сообщение об ошибке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 39, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named _tkinter
11 ответов
Я использую MacOS Big Sur (11.2.3).
С python2 у меня есть
Tkinter
встроенный.
С python3 его нужно устанавливать вручную, и это очень просто, просто запустите:
$ brew install python-tk
Чтобы запустить python2 в терминале, выполните
python file.py
.
Чтобы запустить python3 в терминале, выполните
python3 file.py
.
Исходя из приведенных выше комментариев и того факта, что Python должен быть связан с фреймворком Tcl/Tk:
Если у вас нет инструментов командной строки Xcode, установите их:
xcode-select --install
Если у вас нет установки Tcl/Tk brew (проверьте список brew), установите это:
brew install tcl-tk
Затем запустите "brew uninstall python", если он не был установлен с опцией --with-tcl-tk (текущая официальная опция). Затем снова установите Python, связав его с установленным TRL / Tk для brew:
brew install python --with-tcl-tk
С brew и python3 вам нужно установить Tinker отдельно.
brew сообщение при установке python:
tkinter больше не входит в эту формулу, но доступен отдельно:
brew install python-tk@3.9
2018 Обновление
brew reinstall python --with-tcl-tk
Примечание: Homebrew теперь использует Python 3 по умолчанию - блог Homebrew. Документы
тестирование
python
должен вызвать системный Python 2, python3
должен поднять Python 3.
idle
указывает на систему Python/tcl-tk. Он покажет устаревшую ошибку tcl-tk (если вы не brew install python@2 --with-tcl-tk
)
idle3
должен вызвать Python 3 без предупреждений.
Предостережение
--with-tcl-tk
установлю python
непосредственно с http://python.org/, который вы увидите при запуске brew info python
,
Больше информации здесь.
Если вы используете pyenv
вы можете попробовать установить tcl-tk
через homebrew, а затем активировав env. вары. упоминается в разделе предостережений, как подробно описано в этом ответе. Активация этих env. вары. до установки python через homebrew может сработать для вас:
※ export PATH="/usr/local/opt/tcl-tk/bin:$PATH"
※ 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"
※ brew reinstall python
На Mac OSX вы должны установить TCL отдельно:
Вы найдете инструкции и загружаемые файлы здесь: https://www.tcl.tk/software/tcltk/ и там: http://wiki.tcl.tk/1013
Это требует немного усилий, но это не сложно и не сложно.
В MacOS 11.13.1 с помощью
brew install python
brew install python-tk
Теперь я могу выбрать
TkAgg
в matplotlib, но когда я использую его в ipython, я получаю сообщение об ошибке
%pylab
matplotlib.use('tkagg')
plot([0,1])
приводит к
2021-05-07 21:51:02.954 Python[10773:71016] -[NSApplication macOSVersion]: unrecognized selector sent to instance 0x11779f8c0
2021-05-07 21:51:02.956 Python[10773:71016] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication macOSVersion]: unrecognized selector sent to instance 0x11779f8c0'
*** First throw call stack:
(
0 CoreFoundation 0x00000001a0d97db8 __exceptionPreprocess + 240
1 libobjc.A.dylib 0x00000001a0ac10a8 objc_exception_throw + 60
2 CoreFoundation 0x00000001a0e28ba0 -[NSObject(NSObject) __retain_OA] + 0
3 CoreFoundation 0x00000001a0cf91e4 ___forwarding___ + 1444
4 CoreFoundation 0x00000001a0cf8b80 _CF_forwarding_prep_0 + 96
5 libtk8.6.dylib 0x000000012754a844 GetRGBA + 308
6 libtk8.6.dylib 0x000000012754a208 SetCGColorComponents + 132
7 libtk8.6.dylib 0x000000012754a65c TkpGetColor + 572
8 libtk8.6.dylib 0x00000001274ac714 Tk_GetColor + 220
9 libtk8.6.dylib 0x000000012749fea0 Tk_Get3DBorder + 204
10 libtk8.6.dylib 0x000000012749fcac Tk_Alloc3DBorderFromObj + 144
11 libtk8.6.dylib 0x00000001274adadc DoObjConfig + 840
12 libtk8.6.dylib 0x00000001274ad690 Tk_InitOptions + 348
13 libtk8.6.dylib 0x00000001274ad58c Tk_InitOptions + 88
14 libtk8.6.dylib 0x00000001274d4cb4 CreateFrame + 1448
15 libtk8.6.dylib 0x00000001274d4fac TkListCreateFrame + 156
16 libtk8.6.dylib 0x00000001274cde80 Initialize + 1848
17 _tkinter.cpython-39-darwin.so 0x000000012059a31c Tcl_AppInit + 80
18 _tkinter.cpython-39-darwin.so 0x000000012059487c Tkapp_New + 592
19 _tkinter.cpython-39-darwin.so 0x000000012059410c _tkinter_create + 580
20 Python 0x00000001007150c4 cfunction_vectorcall_FASTCALL + 88
21 Python 0x00000001007bac4c call_function + 128
22 Python 0x00000001007b8640 _PyEval_EvalFrameDefault + 39844
23 Python 0x00000001007ada9c _PyEval_EvalCode + 444
24 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
25 Python 0x00000001006c58ac _PyObject_FastCallDictTstate + 208
26 Python 0x0000000100739bf4 slot_tp_init + 188
27 Python 0x000000010073f850 type_call + 300
28 Python 0x00000001006c5590 _PyObject_MakeTpCall + 132
29 Python 0x00000001007bacd8 call_function + 268
30 Python 0x00000001007b86e8 _PyEval_EvalFrameDefault + 40012
31 Python 0x00000001006c61fc _PyFunction_Vectorcall + 180
32 Python 0x00000001006c8c98 method_vectorcall + 124
33 Python 0x00000001007bac4c call_function + 128
34 Python 0x00000001007b8640 _PyEval_EvalFrameDefault + 39844
35 Python 0x00000001007ada9c _PyEval_EvalCode + 444
36 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
37 Python 0x00000001006c8c98 method_vectorcall + 124
38 Python 0x00000001006c5e40 PyVectorcall_Call + 184
39 Python 0x00000001007b880c _PyEval_EvalFrameDefault + 40304
40 Python 0x00000001007ada9c _PyEval_EvalCode + 444
41 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
42 Python 0x00000001006c5e40 PyVectorcall_Call + 184
43 Python 0x00000001007b880c _PyEval_EvalFrameDefault + 40304
44 Python 0x00000001007ada9c _PyEval_EvalCode + 444
45 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
46 Python 0x00000001007bac4c call_function + 128
47 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
48 Python 0x00000001006c61fc _PyFunction_Vectorcall + 180
49 Python 0x00000001007bac4c call_function + 128
50 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
51 Python 0x00000001007ada9c _PyEval_EvalCode + 444
52 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
53 Python 0x00000001007bac4c call_function + 128
54 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
55 Python 0x00000001007ada9c _PyEval_EvalCode + 444
56 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
57 Python 0x00000001007bac4c call_function + 128
58 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
59 Python 0x00000001007ada9c _PyEval_EvalCode + 444
60 Python 0x00000001007a86a0 builtin_exec + 356
61 Python 0x00000001007150c4 cfunction_vectorcall_FASTCALL + 88
62 Python 0x00000001007bac4c call_function + 128
63 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
64 Python 0x00000001006da678 gen_send_ex + 192
65 Python 0x00000001007b35b4 _PyEval_EvalFrameDefault + 19224
66 Python 0x00000001006da678 gen_send_ex + 192
67 Python 0x00000001007b35b4 _PyEval_EvalFrameDefault + 19224
68 Python 0x00000001006da678 gen_send_ex + 192
69 Python 0x00000001006d1cb0 method_vectorcall_O + 108
70 Python 0x00000001007bac4c call_function + 128
71 Python 0x00000001007b85c4 _PyEval_EvalFrameDefault + 39720
72 Python 0x00000001006c61fc _PyFunction_Vectorcall + 180
73 Python 0x00000001007bac4c call_function + 128
74 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
75 Python 0x00000001006c61fc _PyFunction_Vectorcall + 180
76 Python 0x00000001007bac4c call_function + 128
77 Python 0x00000001007b85c4 _PyEval_EvalFrameDefault + 39720
78 Python 0x00000001007ada9c _PyEval_EvalCode + 444
79 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
80 Python 0x00000001006c8c98 method_vectorcall + 124
81 Python 0x00000001007bac4c call_function + 128
82 Python 0x00000001007b86e8 _PyEval_EvalFrameDefault + 40012
83 Python 0x00000001007ada9c _PyEval_EvalCode + 444
84 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
85 Python 0x00000001007bac4c call_function + 128
86 Python 0x00000001007b85c4 _PyEval_EvalFrameDefault + 39720
87 Python 0x00000001007ada9c _PyEval_EvalCode + 444
88 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
89 Python 0x00000001007bac4c call_function + 128
90 Python 0x00000001007b85c4 _PyEval_EvalFrameDefault + 39720
91 Python 0x00000001006c61fc _PyFunction_Vectorcall + 180
92 Python 0x00000001007bac4c call_function + 128
93 Python 0x00000001007b85c4 _PyEval_EvalFrameDefault + 39720
94 Python 0x00000001007ada9c _PyEval_EvalCode + 444
95 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
96 Python 0x00000001006c8c98 method_vectorcall + 124
97 Python 0x00000001006c5e40 PyVectorcall_Call + 184
98 Python 0x00000001007b880c _PyEval_EvalFrameDefault + 40304
99 Python 0x00000001007ada9c _PyEval_EvalCode + 444
100 Python 0x00000001006c62b4 _PyFunction_Vectorcall + 364
101 Python 0x00000001007bac4c call_function + 128
102 Python 0x00000001007b8664 _PyEval_EvalFrameDefault + 39880
103 Python 0x00000001007ada9c _PyEval_EvalCode + 444
104 Python 0x0000000100805498 run_eval_code_obj + 136
105 Python 0x00000001008053ac run_mod + 112
106 Python 0x0000000100802be8 pyrun_file + 168
107 Python 0x000000010080250c pyrun_simple_file + 276
108 Python 0x00000001008023b8 PyRun_SimpleFileExFlags + 80
109 Python 0x0000000100822560 pymain_run_file + 320
110 Python 0x0000000100821b2c pymain_run_python + 412
111 Python 0x000000010082194c Py_RunMain + 24
112 Python 0x0000000100822f50 pymain_main + 36
113 Python 0x00000001008231c8 Py_BytesMain + 40
114 libdyld.dylib 0x00000001a0c38420 start + 4
)
libc++abi: terminating with uncaught exception of type NSException
Abort trap: 6
Это может быть из-за того, что у вас нет новейших инструментов командной строки XCode, так что варит собранный питон из исходного кода, а не из бутылки. Пытаться:
xcode-select --install
brew uninstall python
brew install python --use-brewed-tk
Сейчас это немного сложнее, правда, вам все еще нужны инструменты командной строки xcode и homebrew для начала. Но процедура постоянно меняется. Homebrew давно отказался от поддержки tcl-tk, а Apple по-прежнему поставляет tcl-tk только версии 8.5. В любом случае, это возможно, и я лично поддерживаю github gist, чтобы исправить эти проблемы.
В последнем обновлении используется python 3.8.1 (возможно, позже его можно будет использовать и в ветке 3.8.x), см. Здесь, просто следуйте описанным шагам. github gist ссылка для установки tcl-tk с python
Он не работает ни в одной ОС, в которой не установлен TCL Toolkit. Хотя он уже установлен во многих дистрибутивах Linux и/или связан с пакетами Python, загруженными с python.org для Windows и Linux, и, как следствие, обычно ошибочно считается, что он является частью Python, это не относится к macOS. Официальные причины этого описаны в соответствующем документе :
Если вы используете macOS 12 Monterey или более позднюю версию, вы можете столкнуться с проблемами открытия файлов и диалогов сохранения при использовании IDLE или других приложений на основе tkinter. Самые последние версии установщиков python.org (для 3.10.0 и 3.9.8) имеют исправленные версии Tk, чтобы избежать этих проблем. Они должны быть исправлены в следующем выпуске Tk 8.6.12.
Если вы используете Python из любого текущего установщика Python python.org для macOS (3.10.0+ или 3.9.0+), никаких дополнительных действий для использования IDLE или tkinter не требуется. Будет использоваться встроенная версия Tcl/Tk 8.6.
Если вы используете macOS 10.6 или более позднюю версию, поставляемый Apple Tcl/Tk 8.5 содержит серьезные ошибки, которые могут вызывать сбои приложений. Если вы хотите использовать IDLE или Tkinter, не используйте Python, поставляемые Apple. Вместо этого установите и используйте более новую версию Python с сайта python.org или стороннего дистрибьютора, который предоставляет более новую версию Tcl/Tk или связан с ней.
Интегрированная среда разработки Python, IDLE и используемый ею набор инструментов графического интерфейса пользователя tkinter зависят от набора инструментов Tk GUI, который не является частью самого Python. Для достижения наилучших результатов важно, чтобы на вашем компьютере была установлена правильная версия Tcl/Tk. Для последних установщиков Python для macOS, загружаемых с этого веб-сайта, здесь приводится сводка текущих рекомендаций, за которой следует более подробная информация.
Это уже упоминалось, но самый популярный способ сделать это:
$ brew install python-tk
Это будет работать, потому чтоpython-tk
формулы зависят от двух других:python
иtcl-tk
(поэтому вам не нужно дополнительно делатьbrew install python
).
Если вы уже установили python с доморощенным
$ brew install python
Вы можете иметь tkinter с
$ brew install tcl-tk
Вот что у меня сработало с macOS Monterey:
brew install python-tk@3.10
илиbrew install python-tk@3.9
В зависимости от того, какую версию Python вы используете.