[PYTHON] pyenv funktioniert nicht mit tcl-tk, das von homebrew installiert wurde.

Probleme aufgetreten

Als ich versuchte, tkinter aus Python zu verwenden, das mit pyenv auf einem Mac installiert wurde, wurde der folgende Fehler angezeigt.

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'

Die Umwelt ist

Wie Gugu gefunden wurde (und nicht löste)

Installieren Sie Python mit Pyenv neu

Wenn Sie Python mit Pyenv installiert haben, scheint die Deinstallation und Neuinstallation das Problem zu lösen.

Ich habe folgende Seite gefunden:

Insbesondere fühlt es sich an wie ↓.

$ pyenv versions
 system

Wenn ich jedoch tkinter erneut starte ...

$ 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)

Ich bekomme einen weiteren Fehler. In diesem Fall wird der Header mit Version 8.6 kompiliert, aber es scheint, dass die zur Laufzeit referenzierte Bibliothek für Version 8.5 verantwortlich ist.

Obwohl ich gegoogelt habe, konnte ich keine japanische Lösung finden.

Lösung

Als ich auf Englisch gegoogelt habe, habe ich die nächste Seite gefunden.

Das ist es.

Mit anderen Worten, bearbeiten Sie / usr / local / Cellar / pyenv / VERSION / plugins / python-build / bin / python-build und wenden Sie den folgenden Patch an (obwohl das öffentliche Bad "!" 1 ist Zeile umschreiben).

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

So können Sie Python mit pyenv neu installieren.

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

Es ging gut.

Recommended Posts

pyenv funktioniert nicht mit tcl-tk, das von homebrew installiert wurde.
PIL kann nicht von virtualenv mit pyenv installiert werden
Installieren Sie das neueste Python von pyenv, das von Homebrew installiert wurde
Wenn matplotlib nicht mit python2.7 funktioniert
Intellisense funktioniert nicht mit Tensorflow2.0 + VScode
tkinter konnte nicht mit Python verwendet werden, das von pyenv of anyenv installiert wurde
Pip funktioniert nicht gut mit PyDev in Plejaden
Verwenden Sie Anaconda-Python, das mit pyenv von openFrameworks installiert wurde
Ich wollte Python 3.4.3 mit Homebrew + pyenv installieren
Stellen Sie OpenCV3 in Python3 zur Verfügung, das mit pyenv installiert wurde
Beachten Sie, dass von Homebrew installiertes Vim nicht mit dem Python 3.8-Fehler startet
Das Problem, dass MacVim, das von Homebrew installiert wurde, nicht von Python of Pyenv erstellt wurde, wurde behoben
Tensorflow funktioniert nicht!
Wenn die pyenv-Unterstützung von Pipenv (automatische Versionsinstallation) nicht funktioniert
Erstellen Sie eine virtuelle Umgebung mit Anaconda, die über Pyenv installiert ist
Verwenden Sie Python, das von pyenv für die PL / Python-Ausführungsumgebung installiert wurde
Verwenden Sie Python, das von Pyenv mit Sublime REPL von Sublime Text 3 installiert wurde