tkinter konnte nicht mit Python verwendet werden, das von pyenv of anyenv installiert wurde

Wenn Sie nach diesem Symptom suchen, werden Sie einige Artikel in Qiita finden, aber aus irgendeinem Grund hat es nicht funktioniert und ich habe viel versucht und Fehler gemacht, also habe ich mir eine Notiz gemacht.

TL;DR

--Wenn es kein tcl-tk gibt, geben Sie es mit Brew Install tcl-tk ein

Umgebung

Mac Book Pro macOS Catalina 10.15.7

anyenv anyenv 1.1.2-1-g67d402f pyenv 1.2.21

Was ist passiert?

Tkinter, das ich in anderen Artikeln sehe, funktioniert nicht. Ich habe das Terminalprotokoll nicht aufgeschrieben, weil ich dachte, es könnte schnell gelöst werden, aber es war fast das gleiche wie in anderen Artikeln.

Was ich versucht habe

Installieren Sie tcl-tk mit Homebrew

brew install tcl-tk

Also habe ich den Umgebungsvariablen verschiedene Dinge hinzugefügt.

.zshrc


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"

Fügen Sie außerdem die Option "PYTHON_CONFIGURE_OPTS" hinzu, wenn Sie Python in .zshrc erstellen. Zu diesem Zeitpunkt muss die Version von tcl-tk mit der Version übereinstimmen, die Sie in Homebrew eingegeben haben. Überprüfen Sie sie daher. Es scheint, dass Sie die Version des Pakets sehen können, das Sie in Homebrew mit "Brew Info" abgelegt haben (ich habe es heute gelernt).

brew info tcl-tk
tcl-tk: stable 8.6.10 (bottled) [keg-only]
Tool Command Language
https://www.tcl-lang.org
/usr/local/Cellar/tcl-tk/8.6.10 (3,036 files, 51MB)
  Poured from bottle on 2020-11-09 at 10:51:55
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/tcl-tk.rb
License: TCL
==> Dependencies
Required: [email protected] ✔
==> Caveats
tcl-tk is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have tcl-tk first in your PATH run:
  echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc

For compilers to find tcl-tk you may need to set:
  export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
  export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"

For pkg-config to find tcl-tk you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"

==> Analytics
install: 8,020 (30 days), 24,799 (90 days), 101,382 (365 days)
install-on-request: 4,416 (30 days), 13,662 (90 days), 53,123 (365 days)
build-error: 0 (30 days)

Es scheint 8.6.10 zu sein, also sollten Sie in diesem Fall "tcl8.6" und "tk8.6" angeben.

(Ich hab's mir angesehen)

ls /usr/local/opt/tcl-tk/lib
Tk.icns           libtk8.6.dylib    tclConfig.sh      tdbcmysql1.1.1
Tk.tiff           libtkstub8.6.a    tcllib1.20        tdbcodbc1.1.1
itcl4.2.0         pkgconfig         tcllibc           tdbcpostgres1.1.1
itk4.1.0          sqlite3.30.1.2    tclooConfig.sh    thread2.8.5
libtcl8.6.dylib   tcl8              tcltls1.7.20      tk8.6
libtclstub8.6.a   tcl8.6            tdbc1.1.1         tkConfig.sh

Also werde ich es zu .zshrc hinzufügen.

.zshrc


export 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'"

Lesen wir die Einstellungen noch einmal. Sie können . ~ / .Zshrc, source ~ / .zshrc oder das Terminal neu öffnen, wie Sie möchten.

Sobald dies erledigt ist, installieren Sie Python neu. ... Nun, da ich es für eine lange Zeit verlassen habe, war die enthaltene Version 3.7.4, was alt ist, also denke ich darüber nach, 3.8.5 hier neu zu installieren. (Wenn es gut geht, möchte ich es wieder einsetzen)

pyenv install 3.8.5
python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.5.tar.xz...
-> https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
Installing Python-3.8.5...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.8.5

Wechseln Sie dann die globale Version

pyenv global 3.8.5
python -V
Python 3.8.5

Na dann.

python -m tkinter -c "tkinter._test()"
(Weggelassen)
RuntimeError: tk.h version (8.6) doesn't match libtk.a version (8.5)

Was?

Jeder sagt, es hat funktioniert.

Suche weiter

Eine weitere Suche bei Google ergab, dass beim Festlegen von "PYTHON_CONFIGURE_OPTS" auch das Hinzufügen von "--enable-shared" funktioniert hat Meinung. / question / 60469202 / enable-to-install-tkinter-with-pyenv-pythons-on-macos # comment112082121_61879759) Also lass es uns versuchen.

- export 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'"
+ export 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' --enable-shared"

Laden Sie also .zshrc erneut und installieren Sie Python neu

pyenv uninstall 3.8.5
pyenv: remove /Users/*****/.anyenv/envs/pyenv/versions/3.8.5? [y|N]y
pyenv: 3.8.5 uninstalled
pyenv install 3.8.5
python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.5.tar.xz...
-> https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
Installing Python-3.8.5...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.8.5

Irgendwie ist es besser, auf "Leerlauf" zu klicken und zu sehen, dass kein Fehler vorliegt, also werde ich das auch versuchen.

idle

image.png

Sieht okay aus.

Dann wieder.

python -m tkinter -c "tkinter._test()"

image.png

Es ist endlich ein Erfolg. Yay!

Zusammenfassung

Wenn Sie tkinter mit der bekannten Methode nicht verwenden können, können Sie Ihren Build-Optionen "--enable-shared" hinzufügen.

Referenz

Recommended Posts

tkinter konnte nicht mit Python verwendet werden, das von pyenv of anyenv installiert wurde
Verwenden Sie Python, das von Pyenv mit Sublime REPL von Sublime Text 3 installiert wurde
Verwenden Sie mit pyenv mehrere Versionen der Python-Umgebung
Wie man tkinter mit Python in Pyenv benutzt
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
Verwenden Sie Python, das von pyenv für die PL / Python-Ausführungsumgebung installiert wurde
Warum kann ich das Modul durch Importieren mit Python verwenden?
Verwenden Sie Python in pyenv mit NeoVim
Verwenden Sie smbus mit python3 in einer pyenv-Umgebung
Ich habe Numba mit Python3.5 installiert und verwendet
Verwenden Sie Anaconda-Python, das mit pyenv von openFrameworks installiert wurde
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich möchte MATLAB feval mit Python verwenden
pyenv funktioniert nicht mit tcl-tk, das von homebrew installiert wurde.
Ich wollte Python 3.4.3 mit Homebrew + pyenv installieren
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Stellen Sie OpenCV3 in Python3 zur Verfügung, das mit pyenv installiert wurde
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Python-Entwicklungsumgebung - Verwendung von Pyenv und Virtualenv-
PIL kann nicht von virtualenv mit pyenv installiert werden
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
[Python] Verwenden Sie JSON mit Python
Grundlagen des Eingabe- / Ausgabebildschirms mit tkinter in python3
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
String-Manipulation mit Python & Pandas, die ich oft benutze
3 Dinge, die mir bei der Analyse von Twitter-Followern mit Python aufgefallen sind
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Verwenden Sie Mecab mit Python 3
Verwenden Sie DynamoDB mit Python
Das Problem, dass MacVim, das von Homebrew installiert wurde, nicht von Python of Pyenv erstellt wurde, wurde behoben
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Python mit Docker
Installieren Sie Python mit pyenv
Installieren Sie das neueste Python von pyenv, das von Homebrew installiert wurde
Memo von "Cython beschleunigt Python durch Fusion mit C"
Versionsverwaltung von Node, Ruby und Python mit anyenv
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Ein Memorandum (masOS), das tkinter importiert, konnte nicht mit Python durchgeführt werden, das von pyenv installiert wurde
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Was ich durch das Lösen von 30 Fragen von Python Project Euler gelernt habe
[Python] Ich möchte die Option -h mit argparse verwenden
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Ich habe fp-Wachstum mit Python versucht
Programmieren mit Python und Tkinter
Ich habe versucht, mit Python zu kratzen
Verwenden Sie die Trello-API mit Python
Verwenden Sie die Twitter-API mit Python
Ich habe einen Blackjack mit Python gemacht!
Verwenden Sie TUN / TAP mit Python
Installieren Sie Python mit pyenv mit -fPIC neu
Führen Sie Label mit tkinter [Python] aus.