[PYTHON] Ein Kampf bei der Installation von pyenv auf Cygwin

Eine Aufzeichnung der Installation von pyenv auf Cygwin. Ich konnte oder konnte es nicht mit der Python-Version installieren.

Umgebung: Cygwin (Setup-Version 2.900 (64 Bit))

Geschichte verändern: 2020/01/17 Erster Entwurf 2020/01/19 Hinzugefügt, dass die Pyenv-Funktion nicht funktioniert

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_bashrc
$ source ~/.bash_bashrc

--Bestätigung von Python, das mit pyenv installiert werden kann.

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
Folgendes wird weggelassen

--Installation von Python
Zuerst habe ich Python 3.7.6 installiert.

$ pyenv install 3.7.6
Downloading Python-3.7.6.tar.xz...
-> https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz
Installing Python-3.7.6...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.7.6 to /home/xxxx/.pyenv/versions/3.7.6

Die Installation braucht Zeit, da die angegebene Version von Python in Ihrer Pyenv-Umgebung installiert wird. Auf meinem PC dauerte es ungefähr 10 Minuten.

Seit WARNING herauskam, antwortete ich wie folgt. ** WARNUNG: Die Python bz2-Erweiterung wurde nicht kompiliert. Fehlt die Unterstützung für bzip2 lib? ** Installieren Sie das Paket libbz2-devel mit Cygwin Setup, deinstallieren Sie es mit
pyenv uninstall -f 3.7.6
und führen Sie dann
pyenv install 3.7.6
erneut aus, um das Problem zu lösen.

** WARNUNG: Die Python sqlite3-Erweiterung wurde nicht kompiliert. Fehlt die SQLite3-Bibliothek? ** Ich habe die sqlite3-bezogenen Pakete in Cygwins Setup installiert (schließlich alle sqlite3-bezogenen Pakete installiert), aber WARNUNG wurde nicht behoben.
Deinstallieren Sie daher alle sqlite3-bezogenen Pakete mit Cygwin Setup und laden Sie die Quelle (sqlite-autoconf-3300100.tar.gz) von der SQLite-Download-Site (* 1) herunter. Entpacken Sie ./configure, make, make install, um SQLite3 zu installieren (Installationsziel ist standardmäßig / usr / local), und installieren Sie pyenv erneut, um das Problem zu lösen.

※1https://www.sqlite.org/download.html

--Installation von Python 3.6.10
Ich habe den folgenden Fehler erhalten.

$ pyenv install 3.6.10
Downloading Python-3.6.10.tar.xz...
-> https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz
Installing Python-3.6.10...

BUILD FAILED (CYGWIN_NT-6.1 3.1.2(0.340/5/3) using python-build 1.2.16-1-g4500a33c)

Inspect or clean up the working tree at /tmp/python-build.20200114100336.19695
Results logged to /tmp/python-build.20200114100336.19695.log

Last 10 log lines:
     PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));
                                                              ^
./Include/tupleobject.h:62:75:Bemerkungen: in definition of macro ‘PyTuple_SET_ITEM’
 #define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v)
                                                                           ^
./Modules/signalmodule.c:979:5:Bemerkungen: in expansion of macro ‘PyStructSequence_SET_ITEM’
     PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));
     ^~~~~~~~~~~~~~~~~~~~~~~~~
make: *** [Makefile:1782: Modules/signalmodule.o]Fehler 1
make: ***Warten auf einen unvollständigen Job....

In ./Modules/signalmodule.c ist ein Kompilierungsfehler aufgetreten. Also habe ich die ./Modules/signalmodule.c-Quelle von Python-3.7.6, die erfolgreich installiert wurde, mit Python-3.6.10 verglichen, bei dem ein Kompilierungsfehler aufgetreten ist.

python


◎python-3.6.10./Modules/signalmodule.Wo ein Fehler in c aufgetreten ist
    PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));

◎python-3.7.6 von./Modules/signalmodule.Gleicher Ort mit c
#ifdef HAVE_SIGINFO_T_SI_BAND
    PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));
#else
    PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(0L));
#endif

Wenn Sie oben sehen, können Sie sehen, dass in Python-3.7.6 die Verarbeitung durch den Schalter HAVE_SIGINFO_T_SI_BAND getrennt ist. Bei der Konfiguration des Installationspakets für Python-3.7.6 habe ich den Cygwin-Header überprüft und den Schalter HAVE_SIGINFO_T_SI_BAND auf 1 gesetzt, wenn si_band in der Struktur siginfo_t vorhanden war. Andernfalls wurde nichts unternommen ( Dies entspricht der Ausgabe Nr. 21085. Daher hat Python-3.7.6 keinen Kompilierungsfehler verursacht. In Wirklichkeit existiert si_band nicht in Cygwins siginfo_t-Struktur. Python-3.6.10 bezieht sich also bedingungslos auf si_band von siginfo_t, sodass ein Fehler aufgetreten ist. Nach dem Überprüfen habe ich einen Artikel (* 2) gefunden, in dem Sie die Umgebungsvariable PYTHON_BUILD_CACHE_PATH festlegen und die zwischengespeicherte Quelle installieren können. Verwenden Sie sie daher, um ./Modules/signalmodule.c von python-3.6.10 in python-3.7.6 zu ändern. Ich dachte, ich sollte es ändern und installieren.

※2 https://github.com/pyenv/pyenv/tree/master/plugins/python-build

Eigentlich habe ich das folgende Verfahren ausprobiert.

$ pyenv install -k 3.6.10   *1
⇒ Ein Fehler wird auftreten,$PYENV_ROOT/sources/3.6.Python auf 10 heruntergeladen-3.6.10.tar.xz bleibt.
[Manuelle Bedienung] Python-3.6.10.tar.Entpacken und entpacken Sie xz an einem geeigneten Ort.
Ich habe einen Fehler bekommen./Modules/signalmodule.c zu Python-3.7.Ändern Sie es wie den Code in 6
Neues Python-3.6.10.tar.Erstellen Sie xz.
$ mkdir $PYENV_ROOT/cache   *2
[Manuelle Bedienung] Der neu erstellte Python-3.6.10.tar.xz$PYENV_ROOT/In den Cache kopieren.
$ PYTHON_BUILD_CACHE_PATH=$PYENV_ROOT/cache pyenv install 3.6.10   *3

Aber dennoch Downloading Python-3.6.10.tar.xz... -> https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz Wird angezeigt und vom Server heruntergeladen. Als ich das vom Python-Server heruntergeladene Paket in den Cache legte und es über den Cache installierte, wurde es nicht heruntergeladen. Nach weiteren Untersuchungen scheint es, dass das zu installierende Paket die korrekte SHA256-Prüfsumme sein muss, die in pyenv im Artikel (* 3) von Join GitHub heute definiert ist. Ich habe die Installation von Python-3.6.10 mit dieser Methode abgebrochen, da dies schwieriger ist.

※3 https://github.com/pyenv/pyenv/issues/563

Der Installationsbefehl lautet

$ pyenv help install
Usage: pyenv install [-f] [-kvp] <version>
       pyenv install [-f] [-kvp] <definition-file>
       pyenv install -l|--list
       pyenv install --version

  -l/--list          List all available versions
  -f/--force         Install even if the version appears to be installed already
  -s/--skip-existing Skip if the version appears to be installed already

  python-build options:

  -k/--keep          Keep source tree in $PYENV_BUILD_ROOT after installation
                     (defaults to $PYENV_ROOT/sources)
  -p/--patch         Apply a patch from stdin before building
  -v/--verbose       Verbose mode: print compilation status to stdout
  --version          Show version of python-build
  -g/--debug         Build a debug version

Es scheint also eine andere Möglichkeit zu geben, \ anzugeben und mit --patch zu patchen und zu installieren, aber ich konnte keine nützlichen Informationen finden und gab auf. Wenn Sie Zeit haben, würde ich gerne die Quelle von Pyenv sehen! Ich denke, ich sollte die Familie bitten, Korrekturen vorzunehmen, aber ich kann nicht, weil ich kein Englisch kann, ich habe es nicht getan und ich kenne den Stil nicht.

$ pyenv install 3.8.1
Downloading Python-3.8.1.tar.xz...
-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz
Installing Python-3.8.1...
Installed Python-3.8.1 to /home/xxxx/.pyenv/versions/3.8.1

$ pyenv versions
* system (set by /home/xxxx/.pyenv/version)
  3.7.6
  3.8.1

Nun, ich konnte Python 3.7.6 und Python 3.8.1 auf Pyenv installieren, aber ich stolperte erneut, als ich den Vorgang überprüfte.

$ pyenv global 3.8.1

$ pyenv versions
  system
  3.7.6
* 3.8.1 (set by /home/xxxx/.pyenv/version)

$ python -V
Python 2.7.16

$ pyenv which python
/usr/bin/python

Mit dem Cygwin-Paket installiertes Python wird ausgeführt und pyenv funktioniert nicht. Also habe ich es mit dem von Ubuntu verglichen, wo Pyenv läuft. Dann stellte sich heraus, dass die symbolische Verbindung, die in Ubuntus Pyenv-Umgebung besteht, in Cygwins Pyenv-Umgebung nicht existiert. Vielleicht dachte ich, ich sollte mir $ PYENV_ROOT / plugins / python-build \ bin / python-build (Bash-Skript) ansehen, aber ich hatte keine Lust dazu. Als Antwort hat ** manuell ** den folgenden symbolischen Link erstellt.

◎python 3.7.Symbolische Verknüpfung zu 6

$ cd $PYENV_ROOT/versions/3.7.6
$ ln -s easy_install-3.7 easy_install
$ ln -s idle3.7 idle
$ ln -s pip3.7 pip
$ ln -s pydoc3.7 pydoc
$ ln -s python3.7m.exe python
$ ln -s python3.7-config python-config

◎python 3.8.Symbolische Verknüpfung zu 1

$ cd $PYENV_ROOT/versions/3.8.1
$ ln -s easy_install-3.8 easy_install
$ ln -s idle3.8 idle
$ ln -s pip3.8 pip
$ ln -s pydoc3.8 pydoc
$ ln -s python3.8.exe python-buildpython
$ ln -s python3.8-config python-config

Danach begann Pyenv wie folgt zu arbeiten.

$ pyenv init
$ pyenv rehash

$ pyenv global 3.7.6
$ pyenv versions
  system
* 3.7.6 (set by /home/xxxx/.pyenv/version)
  3.8.1
$ python -V
Python 3.7.6
$ pyenv which python
/home/xxxx/.pyenv/versions/3.7.6/bin/python

$ pyenv global 3.8.1
$ pyenv versions
  system
  3.7.6
* 3.8.1 (set by /home/xxxx/.pyenv/version)
$ python -V
Python 3.8.1
$ pyenv which python
/home/xxxx/.pyenv/versions/3.8.1/bin/python

$ pyenv global system
$ pyenv versions
* system (set by /home/xxxx/.pyenv/version)
  3.7.6
  3.8.1
$ python -V
Python 2.7.16
$ pyenv which python
/usr/bin/python

--Zusammenfassung

Das Ergebnis der Python-Installation mit pyenv ist wie folgt. Python 2.7.17 Fehler Python 3.5.9 ist fehlgeschlagen Python 3.6.10 ist fehlgeschlagen Python 3.7.6 Erfolg Python 3.8.1 Erfolg

Selbst wenn die Installation erfolgreich war, funktionierte sie nicht gehorsam und ich musste sie manuell manuell handhaben (ich bin mir nicht sicher, wie richtig dies ist). Derzeit funktioniert die angegebene Version von Python, es gibt jedoch keine Garantie dafür, dass bei der Verwendung dieses Pythons keine neuen Probleme auftreten. Im Moment hielt ich es für ratsam, Pyenv nicht mit Cygwin zu verwenden.

Ich hoffe, es wird für diejenigen hilfreich sein, die es schwer haben. Ich würde mich auch über Informationen freuen, die Sie auf diese Weise installieren können.

das ist alles

Recommended Posts

Ein Kampf bei der Installation von pyenv auf Cygwin
Installation von pyenv unter Ubuntu 16.04
Unterstützung bei der Installation von Pillon auf Python3.9
Hinweise zur Installation von Python mit PyEnv
Fehlerbehebung bei der Installation von numba unter macOS
Eine Problemumgehung bei der Installation von pyAudio mit pip.
Überprüfen Sie! Fehlerbehebung bei der Installation von PyObjc auf einem Mac
Fehler beim Installieren eines Moduls mit Python pip
Eine süchtig machende Geschichte bei der Verwendung von Tensorflow unter Android
Vorsichtsmaßnahmen bei der Installation eines hierarchischen Include-Verzeichnisses mit waf
Ich habe einen UnicodeDecodeError erhalten, als ich auf Ubuntu Pip installiert habe
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Erstellen Sie mit pyenv eine Python-Umgebung auf Ihrem Mac
Erstellen Sie eine Python-Entwicklungsumgebung mit pyenv unter MacOS
Memo, als Django für VPS freigegeben wurde (Vorbereitung)
Mindestnotizen bei Verwendung von Python auf Mac (pyenv edition)
Ein Memorandum zur WLAN-Verbindung bei der Installation von Arch Linux
Python Conda mit Cygwin
Installieren Sie pyenv auf dem Mac
Stolperte bei der Installation von PyOCR
Hinweise zur Installation von PycURL
Pandas auf python2.6 installieren
Vorsichtsmaßnahmen bei der Installation von fbprophet
Installieren Sie pyenv unter OSX
Erstellen Sie eine maschinelle Lernumgebung auf einem Mac (pyenv, deeplearning, opencv).
Erstellen Sie eine Python-Entwicklungsumgebung (pyenv / virtualenv) auf einem Mac (Homebrew).
Optionen bei der Installation von Bibliotheken, die nicht in pyenv weitergeleitet werden können
Lösung, wenn Django Projekt starten ist unter Windows nicht möglich
[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
Vorsichtsmaßnahmen und Lösungen bei der Installation von Ubuntu auf einem PC mit NVIDIA Gravo
(Hinweis) Punkte, auf die Sie bei der Installation von Scilab unter ArchLinux achten sollten
Ein Hinweis, wenn ich das Jupyter-Notizbuch unter Windows nicht öffnen kann
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
Liste der zu installierenden Bibliotheken bei der Installation von Python mit Pyenv