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, \
Außerdem habe ich Python 2.7.17 und Python 3.5.9 installiert, aber es ist ein Fehler aufgetreten. Ich jage nicht tief.
Erfolgreiche Installation von Python 3.8.1.
$ 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