[PYTHON] Une difficulté lors de l'installation de pyenv sur Cygwin

Un enregistrement de l'installation de pyenv sur Cygwin. Je pourrais ou ne pouvais pas l'installer avec la version python.

Environnement: Cygwin (Setup version 2.900 (64 bits))

historique des modifications: 2020/01/17 Premier projet 2020/01/19 Ajouté à propos du fait que la fonction pyenv ne fonctionne pas

--Installez pyenv sur Cygwin
Je n'ai pas trouvé le paquet pyenv dans le programme d'installation de Cygwin, donc je l'ai installé avec git.

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

--Définir les variables d'environnement

$ 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

--Confirmation de python qui peut être installé avec pyenv.

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
Ce qui suit est omis

--Installation de python
J'ai d'abord installé python 3.7.6.

$ 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

L'installation prend du temps car elle installe la version spécifiée de python dans votre environnement pyenv. Cela a pris environ 10 minutes sur mon PC.

Depuis que WARNING est sorti, j'ai répondu comme suit. ** AVERTISSEMENT: l'extension Python bz2 n'a pas été compilée. La prise en charge de la librairie bzip2? ** est manquante Installez le paquet libbz2-devel avec Cygwin Setup, désinstallez-le avec
pyenv uninstall -f 3.7.6
, puis exécutez à nouveau
pyenv install 3.7.6
pour résoudre le problème.

** AVERTISSEMENT: l'extension Python sqlite3 n'a pas été compilée. La bibliothèque SQLite3 est-elle manquante? ** J'ai installé les packages associés à sqlite3 dans le programme d'installation de Cygwin (finalement installé tous les packages associés à sqlite3), mais AVERTISSEMENT n'a pas été résolu.
Par conséquent, désinstallez tous les packages liés à sqlite3 avec Cygwin Setup et téléchargez le source (sqlite-autoconf-3300100.tar.gz) depuis le site de téléchargement de SQLite (* 1). Décompressez, exécutez ./configure, make, make install pour installer SQLite3 (la destination d'installation est / usr / local par défaut) et réinstallez pyenv pour résoudre le problème.

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

--Installing python 3.6.10
J'ai eu l'erreur suivante.

$ 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:Remarques: 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:Remarques: in expansion of macro ‘PyStructSequence_SET_ITEM’
     PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));
     ^~~~~~~~~~~~~~~~~~~~~~~~~
make: *** [Makefile:1782: Modules/signalmodule.o]Erreur 1
make: ***En attente d'un travail incomplet....

Il y a une erreur de compilation dans ./Modules/signalmodule.c. J'ai donc comparé la source ./Modules/signalmodule.c de Python-3.7.6, qui a été installée avec succès, avec Python-3.6.10, qui avait une erreur de compilation.

python


◎python-3.6.dix./Modules/signalmodule.Où une erreur s'est produite dans c
    PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));

◎python-3.7.6 sur./Modules/signalmodule.Même endroit avec 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

En regardant ci-dessus, vous pouvez voir que dans python-3.7.6, le traitement est séparé par le commutateur HAVE_SIGINFO_T_SI_BAND. En regardant la configuration du package d'installation python-3.7.6, j'ai vérifié l'en-tête Cygwin et mis le commutateur HAVE_SIGINFO_T_SI_BAND sur 1 si si_band était présent dans la structure siginfo_t, sinon rien n'a été fait ( Cela correspond au numéro 21085). Par conséquent, python-3.7.6 n'a pas provoqué d'erreur de compilation. En réalité, si_band n'existe pas dans la structure siginfo_t de Cygwin. Ainsi, python-3.6.10 fait référence inconditionnellement à si_band de siginfo_t, donc une erreur s'est produite. Après enquête, j'ai trouvé un article (* 2) selon lequel la variable d'environnement PYTHON_BUILD_CACHE_PATH peut être définie et la source mise en cache peut être installée. J'ai pensé que je devais le changer et l'installer.

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

En fait, j'ai essayé la procédure suivante.

$ pyenv install -k 3.6.10   *1
⇒ Une erreur se produira,$PYENV_ROOT/sources/3.6.Python téléchargé vers 10-3.6.10.tar.xz reste.
[Opération manuelle] Python-3.6.10.tar.Décompressez et décompressez xz dans un emplacement approprié.
J'ai une erreur./Modules/signalmodule.c en python-3.7.Modifiez-le comme le code en 6
Nouveau Python-3.6.10.tar.Créez xz.
$ mkdir $PYENV_ROOT/cache   *2
[Opération manuelle] Le Python nouvellement créé-3.6.10.tar.xz$PYENV_ROOT/Copier dans le cache.
$ PYTHON_BUILD_CACHE_PATH=$PYENV_ROOT/cache pyenv install 3.6.10   *3

Mais reste Downloading Python-3.6.10.tar.xz... -> https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz Est affiché et téléchargé depuis le serveur. Lorsque j'ai mis le package téléchargé à partir du serveur python dans le cache et que je l'ai installé à l'aide du cache, il n'a pas été téléchargé. Après une enquête plus approfondie, dans l'article Rejoindre GitHub aujourd'hui (* 3), il semble que le package à installer doit être la somme de contrôle SHA256 correcte définie dans pyenv. J'ai abandonné l'installation de Python-3.6.10 par cette méthode car c'est plus difficile que cela.

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

La commande d'installation est

$ 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

Donc, il semble y avoir un autre moyen de spécifier \ <fichier-définition > et de patcher et installer avec --patch, mais je n'ai pas trouvé d'informations utiles et j'ai abandonné. Si vous avez le temps, j'aimerais voir la source de pyenv! Je pense que je devrais demander au chef de famille de faire des corrections, mais je ne peux pas parce que je ne peux pas utiliser l'anglais, je ne l'ai pas fait et je ne connais pas le style.

$ 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

--Vérifier le fonctionnement de pyenv

Eh bien, j'ai pu installer python 3.7.6 et python 3.8.1 sur pyenv, mais j'ai de nouveau trébuché lorsque j'ai vérifié l'opération.

$ 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

Et, python installé avec le package Cygwin est exécuté et pyenv ne fonctionne pas. Je l'ai donc comparé à celui d'ubuntu où pyenv fonctionne. Ensuite, il s'est avéré que le lien symbolique qui existe dans l'environnement pyenv d'ubuntu n'existe pas dans l'environnement pyenv de Cygwin. J'ai peut-être pensé que je devrais regarder $ PYENV_ROOT / plugins / python-build \ bin / python-build (script bash), mais je n'avais pas envie de faire ça. En réponse, ** manuellement ** a créé le lien symbolique suivant.

◎python 3.7.Lien symbolique vers 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.Lien symbolique vers 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

Après cela, pyenv a commencé à fonctionner comme suit.

$ 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

--Résumé

Le résultat de l'installation de python avec pyenv est le suivant. Échec de python 2.7.17 échec de python 3.5.9 python 3.6.10 a échoué python 3.7.6 Succès succès de python 3.8.1

Même dans ce cas, même si l'installation a réussi, cela n'a pas fonctionné de manière obéissante et j'ai dû le gérer manuellement individuellement (je ne sais pas si c'est correct). Pour le moment, la version spécifiée de python a commencé à fonctionner, mais il n'y a aucune garantie que divers nouveaux problèmes ne se produiront pas lors de l'utilisation de ce python. Pour le moment, j'ai pensé qu'il serait sage d'éviter d'utiliser pyenv avec Cygwin.

J'espère que cela sera utile pour ceux qui traversent une période difficile. Aussi, j'apprécierais toute information que vous pouvez installer de cette façon.

c'est tout

Recommended Posts

Une difficulté lors de l'installation de pyenv sur Cygwin
Installation de pyenv sur ubuntu 16.04
Assistance lors de l'installation de l'oreiller sur python3.9
Remarques sur l'installation de Python à l'aide de PyEnv
Résolution des erreurs lors de l'installation de numba sur macOS
Une solution de contournement lors de l'installation de pyAudio avec pip.
Vérifiez! Dépannage lors de l'installation de PyObjc sur Mac
Erreur lors de l'installation d'un module avec Python pip
Une histoire addictive lors de l'utilisation de tensorflow sur Android
Précautions lors de l'installation d'un répertoire d'inclusion hiérarchique avec waf
J'ai un UnicodeDecodeError lorsque je pip installé sur ubuntu
Remarques sur l'installation de Chainer 1.5 pour GPU sous Windows
Créez un environnement Python sur votre Mac en utilisant pyenv
Créer un environnement de développement Python à l'aide de pyenv sur MacOS
Mémo quand Django est sorti sur VPS (préparation)
Notes minimales lors de l'utilisation de Python sur Mac (édition pyenv)
Un mémorandum concernant la connexion Wifi lors de l'installation d'Arch Linux
Conda Python avec Cygwin
Installez pyenv sur Mac
Trébuché lors de l'installation de PyOCR
Remarques sur l'installation de PycURL
Installer des pandas sur python2.6
Précautions lors de l'installation de fbprophet
Installez pyenv sur OSX
Créer un environnement d'apprentissage automatique sur Mac (pyenv, deeplearning, opencv)
Créer un environnement de développement Python (pyenv / virtualenv) sur Mac (Homebrew)
Options lors de l'installation de bibliothèques qui ne peuvent pas être envoyées dans pyenv
Solution lorsque Django démarrer le projet n'est pas possible sous Windows
[GCP] Un mémorandum lors de l'exécution d'un programme Python avec Cloud Functions
Précautions et solutions lors de l'installation d'Ubuntu sur un PC avec NVIDIA Gravo
(Note) Points auxquels il faut être accro lors de l'installation de Scilab sur ArchLinux
Une note lorsque je ne peux pas ouvrir le bloc-notes Jupyter sous Windows
Lorsque vous souhaitez lancer une commande UNIX sur Python
Liste des bibliothèques à installer lors de l'installation de Python à l'aide de Pyenv