[PYTHON] pyenv ne fonctionne pas avec tcl-tk installé par homebrew.

Les problèmes rencontrés

Lorsque j'ai essayé d'utiliser tkinter de python installé à l'aide de pyenv sur Mac, j'ai eu l'erreur suivante.

Traceback (most recent call last):
  File "./annotate.py", line 3, in <module>
    import tkinter
  File "/Users/???/.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'

L'environnement est

Comment Gugu a été trouvé (et n'a pas été résolu)

Réinstaller python avec pyenv

Si python est installé avec pyenv, la désinstallation et la réinstallation semblent résoudre le problème.

J'ai trouvé la page suivante:

Plus précisément, cela ressemble à ↓.

$ pyenv versions
 system

Cependant, quand je lance à nouveau tkinter ...

$ python -m tkinter
DEPRECATION WARNING: The system version of Tk is deprecated and may be removed 
in a future release. Please don't rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.
Traceback (most recent call last):
  File "/Users/???/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/Users/???/.pyenv/versions/3.7.4/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File 
"/Users/???/.pyenv/versions/3.7.4/lib/python3.7/tkinter/__main__.py", line 7, in <module>
main()
  File "/Users/???/.pyenv/versions/3.7.4/lib/python3.7/tkinter/__init__.py", line 3988, in _test
    root = Tk()
  File "/Users/???/.pyenv/versions/3.7.4/lib/python3.7/tkinter/__init__.py", line 2025, in __init__
    self._loadtk()
  File "/Users/???/.pyenv/versions/3.7.4/lib/python3.7/tkinter/__init__.py", line 2040, in _loadtk
    % (_tkinter.TK_VERSION, tk_version))
RuntimeError: tk.h version (8.6) doesn't match libtk.a version (8.5)

J'obtiens une autre erreur. Dans ce cas, l'en-tête est compilé en utilisant la version 8.6, mais il semble que la bibliothèque référencée à l'exécution soit responsable de la version 8.5.

Même si j'ai cherché sur Google, je n'ai pas trouvé de solution japonaise.

Solution

Quand j'ai googlé en anglais, j'ai trouvé la page suivante.

Ça y est.

En d'autres termes, éditez / usr / local / Cellar / pyenv / VERSION / plugins / python-build / bin / python-build et appliquez le patch suivant (bien que le bain public soit "!" 1 Réécrire la ligne).

diff -c python-build.orig python-build
*** python-build.orig	2019-12-10 17:47:04.000000000 +0900
--- python-build.new	2019-12-11 11:53:17.000000000 +0900
***************
*** 772,778 ****
        export CC=clang
      fi
      ${!PACKAGE_CONFIGURE:-./configure} --prefix="${!PACKAGE_PREFIX_PATH:-$PREFIX_PATH}" \
 !       $CONFIGURE_OPTS ${!PACKAGE_CONFIGURE_OPTS} "${!PACKAGE_CONFIGURE_OPTS_ARRAY}" || return 1
    ) >&4 2>&1
  
    { "$MAKE" $MAKE_OPTS ${!PACKAGE_MAKE_OPTS} "${!PACKAGE_MAKE_OPTS_ARRAY}"
--- 772,778 ----
        export CC=clang
      fi
      ${!PACKAGE_CONFIGURE:-./configure} --prefix="${!PACKAGE_PREFIX_PATH:-$PREFIX_PATH}" \
 !       $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            ' ${!PACKAGE_CONFIGURE_OPTS} "${!PACKAGE_CONFIGURE_OPTS_ARRAY}" || return 1
    ) >&4 2>&1
  
    { "$MAKE" $MAKE_OPTS ${!PACKAGE_MAKE_OPTS} "${!PACKAGE_MAKE_OPTS_ARRAY}"

Vous pouvez donc réinstaller python avec pyenv.

$ pyenv uninstall 3.7.5
$ pyenv install 3.7.5
$ python -m tkinter

Ça s'est bien passé.

Recommended Posts

pyenv ne fonctionne pas avec tcl-tk installé par homebrew.
PIL ne peut pas être installé par virtualenv avec pyenv
Installez le dernier Python de pyenv installé par homebrew
Quand matplotlib ne fonctionne pas avec python2.7
Intellisense ne fonctionne pas avec tensorflow2.0 + VScode
tkinter n'a pas pu être utilisé avec python installé par pyenv de anyenv
Pip ne fonctionne pas bien avec PyDev dans Pléiades
Utiliser Anaconda-Python installé avec pyenv depuis openFrameworks
Je voulais installer Python 3.4.3 avec Homebrew + pyenv
Rendre OpenCV3 disponible à partir de python3 installé avec pyenv
Notez que Vim installé par Homebrew ne démarre pas avec l'erreur Python 3.8
Résolution du problème selon lequel MacVim installé par Homebrew n'a pas été construit par python de pyenv
Tensorflow ne fonctionne pas!
Lorsque le support pyenv de Pipenv (installation automatique de la version) ne fonctionne pas
Créez un environnement virtuel avec Anaconda installé via Pyenv
Utiliser Python installé par pyenv pour l'environnement d'exécution PL / Python
Utilisez python installé par Pyenv avec Sublime REPL de Sublime Text 3