tkinter n'a pas pu être utilisé avec python installé par pyenv de anyenv

Si vous recherchez ce symptôme, vous trouverez des articles dans Qiita, mais pour une raison quelconque, cela n'a pas fonctionné et j'ai fait beaucoup d'essais et d'erreurs, alors j'ai pris note.

TL;DR

environnement

Mac Book Pro macOS Catalina 10.15.7

anyenv anyenv 1.1.2-1-g67d402f pyenv 1.2.21

Que se passait-il?

Tkinter, que je vois dans d'autres articles, ne fonctionne pas. Je n'ai pas écrit le journal du terminal parce que je pensais qu'il pouvait être résolu rapidement, mais c'était presque le même que je vois dans d'autres articles.

Ce que j'ai essayé

Installez tcl-tk avec Homebrew

brew install tcl-tk

Donc, j'ai ajouté diverses choses aux variables d'environnement.

.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"

De plus, ajoutez l'option PYTHON_CONFIGURE_OPTS lors de la construction de python en .zshrc, À ce stade, la version de tcl-tk doit correspondre à la version de celle que vous avez mise dans Homebrew, alors vérifiez-la. Il semble que vous puissiez voir la version du paquet que vous avez mis dans Homebrew avec brew info (j'ai appris aujourd'hui)

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)

Cela semble être la version 8.6.10, donc dans ce cas, il semble que vous deviez spécifier tcl8.6 et tk8.6.

(J'ai regardé)

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

Je vais donc l'ajouter à .zshrc.

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

Lisons à nouveau les paramètres. Vous pouvez utiliser . ~ / .Zshrc, source ~ / .zshrc ou rouvrir le terminal comme vous le souhaitez.

Une fois cela fait, réinstallez python. ... Eh bien, depuis que je l'ai laissé pendant longtemps, la version incluse était la 3.7.4, qui est ancienne, donc je pense à réinstaller la 3.8.5 ici. (Si ça se passe bien, j'ai envie de le remettre)

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

Puis changez de version globale

pyenv global 3.8.5
python -V
Python 3.8.5

Eh bien.

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

Quelle?

Tout le monde dit que cela a fonctionné.

Rechercher plus loin

Une recherche supplémentaire sur Google a révélé que lors de la configuration de PYTHON_CONFIGURE_OPTS, l'ajout de --enable-shared fonctionnait également opinion. / questions / 60469202 / enable-to-install-tkinter-with-pyenv-pythons-on-macos # comment112082121_61879759) Alors essayons-le.

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

Alors, rechargez à nouveau .zshrc et réinstallez python

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

D'une manière ou d'une autre, il est préférable de cliquer sur «inactif» et de voir qu'il n'y a pas d'erreur, alors je vais essayer cela aussi.

idle

image.png

Ça a l'air bien.

Puis encore.

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

image.png

C'est finalement un succès. Yay!

Sommaire

Si vous ne pouvez pas utiliser tkinter avec la méthode bien connue, vous pouvez ajouter --enable-shared à vos options de construction.

référence

Recommended Posts

tkinter n'a pas pu être utilisé avec python installé par pyenv de anyenv
Utilisez python installé par Pyenv avec Sublime REPL de Sublime Text 3
Utiliser plusieurs versions de l'environnement python avec pyenv
Comment utiliser tkinter avec python dans pyenv
J'ai installé Pygame avec Python 3.5.1 dans l'environnement de pyenv sur OS X
Utiliser Python installé par pyenv pour l'environnement d'exécution PL / Python
Pourquoi puis-je utiliser le module en important avec python?
Utiliser Python mis en pyenv avec NeoVim
Utilisez smbus avec python3 sous environnement pyenv
J'ai installé et utilisé Numba avec Python3.5
Utiliser Anaconda-Python installé avec pyenv depuis openFrameworks
J'ai essayé des centaines de millions de SQLite avec python
Je veux utiliser MATLAB feval avec python
pyenv ne fonctionne pas avec tcl-tk installé par homebrew.
Je voulais installer Python 3.4.3 avec Homebrew + pyenv
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Rendre OpenCV3 disponible à partir de python3 installé avec pyenv
Je souhaite utiliser le répertoire temporaire avec Python2
environnement de développement python -utilisation de pyenv et virtualenv-
PIL ne peut pas être installé par virtualenv avec pyenv
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
[Python] Utiliser JSON avec Python
Bases de l'écran d'entrée / sortie en utilisant tkinter en python3
J'ai essayé de résumer comment utiliser matplotlib de python
Manipulation de chaînes avec python et pandas que j'utilise souvent
3 choses que j'ai remarquées en analysant les abonnés Twitter avec Python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
Utiliser mecab avec Python 3
Utiliser DynamoDB avec Python
Résolution du problème selon lequel MacVim installé par Homebrew n'a pas été construit par python de pyenv
Utilisez Python 3.8 avec Anaconda
Utiliser python avec docker
Installez Python avec pyenv
Installez le dernier Python de pyenv installé par homebrew
Mémo de "Cython-Accélérer Python en fusionnant avec C"
Gestion des versions de Node, Ruby et Python avec anyenv
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
Un mémorandum (masOS) qui importe tkinter n'a pas pu être fait avec python installé à partir de pyenv
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai fait un jeu de frappe simple avec tkinter de Python
Je souhaite spécifier une autre version de Python avec pyvenv
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai évalué la stratégie de négociation du système boursier avec Python.
Ce que j'ai appris en résolvant 30 questions du projet python Euler
[Python] Je souhaite utiliser l'option -h avec argparse
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python
J'ai essayé fp-growth avec python
Programmation avec Python et Tkinter
J'ai essayé de gratter avec Python
Utiliser l'API Trello avec python
Utiliser l'API Twitter avec Python
J'ai fait un blackjack avec du python!
Utiliser TUN / TAP avec Python
Réinstaller python avec pyenv avec -fPIC
Exécuter Label avec tkinter [Python]