[LINUX] Gérez plusieurs versions de Python avec des alternatives de mise à jour (Ubuntu)

Vous devez utiliser différentes bibliothèques tierces et souhaitez réaliser les opérations suivantes:

(Je voudrais exécuter Ubuntu sur un Mac en utilisant VirtualBox et atteindre les objectifs ci-dessus tout en expérimentant afin de ne pas nuire au projet en cours.)

Dans un premier temps, nous allons exécuter (1) et (2).

(0) Environnement

--Ubuntu 20.04 (en utilisant VirtualBox 6.1 sur Mac)

(1) Utilisez correctement plusieurs versions de Python (Python 2.7, 3.6, 3.8, etc.)


$ sudo apt update && apt upgrade -y

$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev

$ apt list --upgradable

$ sudo apt-get install build-essential checkinstall

$ sudo make altinstall 
$ python3 --version
Python 3.8.2

Vous pouvez voir que le python3 inclus à ce stade est python3.8 (python 3.8.2). (Je l'ai recherché et je l'ai trouvé dans / usr / bin /.)

Ensuite, trouvez le lien pour la version Python dont vous avez besoin dans la liste à https://www.python.org/ftp/python/ et utilisez wget pour le télécharger dans / opt /.


#Premier Python-3.8.0
$ cd /opt
$ sudo wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz 
$ sudo tar xzf Python-3.8.0.tgz 
$ cd Python-3.8.0
$ sudo ./configure --enable-optimizations
$ sudo make altinstall


#Puis Python-3.6.10
$ cd /opt
$ sudo wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz 
$ sudo tar xzf Python-3.6.10.tgz 
$ cd Python-3.8.0
$ sudo ./configure --enable-optimizations
$ sudo make altinstall

#Vérifier le répertoire
$ cd /opt
$ ls -l
total 45884
drwxr-xr-x 18   501   501     4096 May  9 18:33 Python-3.6.10
-rw-r--r--  1 root  root  23019480 Dec 18 14:48 Python-3.6.10.tgz
drwxr-xr-x 18 kohei kohei     4096 May  9 17:48 Python-3.8.0
-rw-r--r--  1 root  root  23949883 Oct 14  2019 Python-3.8.0.tgz
drwxr-xr-x  8 root  root      4096 May  8 18:04 VBoxGuestAdditions-6.1.6


$ sudo update-alternatives --install /usr/bin/python python /opt/Python-3.6.10/python 1
$ sudo update-alternatives --install /usr/bin/python python /opt/Python-3.8.0/python 2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 3
$ update-alternatives --list python
/opt/Python-3.6.10/python
/opt/Python-3.8.0/python
/usr/bin/python3.8


$ sudo update-alternatives --config python
There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                       Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8          3         auto mode
* 1            /opt/Python-3.6.10/python   1         manual mode
  2            /opt/Python-3.8.0/python    2         manual mode
  3            /usr/bin/python3.8          3         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1


$ cd /usr/bin
$ ls -l pyt*
lrwxrwxrwx 1 root root      24 May  9 18:20 python -> /etc/alternatives/python
lrwxrwxrwx 1 root root       9 May  8 17:33 python3 -> python3.8
-rwxr-xr-x 1 root root 5457536 Apr 27 11:53 python3.8
lrwxrwxrwx 1 root root      33 Apr 27 11:53 python3.8-config -> x86_64-linux-gnu-python3.8-config
lrwxrwxrwx 1 root root      16 Mar 13 08:20 python3-config -> python3.8-config

$ ls -l /etc/alternatives/python
lrwxrwxrwx 1 root root 25 May  9 19:27 /etc/alternatives/python -> /opt/Python-3.6.10/python

$ which python
/usr/bin/python

$ python -V
Python 3.6.10

Vous pouvez voir que / etc / alternatives / python est un lien symbolique vers le chemin (dans ce cas / opt / Python-3.6.10 / python) correspondant au Python spécifié par l'utilisateur.

Résumé,

Ensuite, mettez à jour pip en suivant les étapes ci-dessous.

#Vérification
$ which python
/usr/bin/python
#Vérification
$ python -V
Python 3.6.10

$ apt install python3-pip
$ python -m pip install --upgrade pip
$ pip --version
pip 20.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

(2) Installez la bibliothèque séparément pour chaque version de Python

À partir de maintenant, j'ajouterai une bibliothèque pour chaque version de Python individuellement. La procédure est la suivante.

#Vérification
$ which python
/usr/bin/python
#Vérification
$ python -V
Python 3.6.10
$ sudo python -m pip install numpy
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/03/27/e35e7c6e6a52fab9fcc64fc2b20c6b516eba930bb02b10ace3b38200d3ab/numpy-1.18.4-cp36-cp36m-manylinux1_x86_64.whl (20.2MB)
    100% |████████████████████████████████| 20.2MB 2.3MB/s 
Installing collected packages: numpy
Successfully installed numpy-1.18.4

$ sudo python -m pip install scipy
Collecting scipy
  Downloading scipy-1.4.1-cp36-cp36m-manylinux1_x86_64.whl (26.1 MB)
     |████████████████████████████████| 26.1 MB 5.8 MB/s 
Requirement already satisfied: numpy>=1.13.3 in /usr/local/lib/python3.6/site-packages (from scipy) (1.18.4)
Could not build wheels for numpy, since package 'wheel' is not installed.
Installing collected packages: scipy
Successfully installed scipy-1.4.1

#Vérifiez le résultat.
$ python -c 'import sys; print(sys.version); import numpy; print(numpy.__file__); import scipy; print(scipy.__file__)'
3.6.10 (default, May  9 2020, 18:32:23) 
[GCC 9.3.0]
/usr/local/lib/python3.6/site-packages/numpy/__init__.py
/usr/local/lib/python3.6/site-packages/scipy/__init__.py

Pour référence, voyons ce qu'il y a dans / usr / local / lib / python3.6 / site-packages /.

$ ls -l /usr/local/lib/python3.6/site-packages/
total 52
-rw-r--r--  1 root root  126 May  9 18:34 easy_install.py
drwxr-xr-x 17 root root 4096 May 10 18:45 numpy
drwxr-xr-x  2 root root 4096 May 10 18:45 numpy-1.18.4.dist-info
drwxr-xr-x  2 root root 4096 May 10 18:45 numpy.libs
drwxr-xr-x  5 root root 4096 May 10 18:46 pip
drwxr-xr-x  2 root root 4096 May 10 18:46 pip-20.1.dist-info
drwxr-xr-x  5 root root 4096 May  9 18:34 pkg_resources
drwxr-xr-x  2 root root 4096 May  9 18:34 __pycache__
-rw-r--r--  1 root root  119 May  9 18:33 README.txt
drwxr-xr-x 23 root root 4096 May 10 18:46 scipy
drwxr-xr-x  2 root root 4096 May 10 18:46 scipy-1.4.1.dist-info
drwxr-xr-x  6 root root 4096 May  9 18:34 setuptools
drwxr-xr-x  2 root root 4096 May  9 18:34 setuptools-40.6.2.dist-info

Pour plus d'informations, voyons que cette installation de numpy scipy n'affecte que Python 3.6.10 (comme prévu). Bien sûr, je n'ai pas touché à Python 3.8.0, donc cela ressemble à ceci:

$ /opt/Python-3.8.0/python -c 'import sys; print(sys.version); import numpy; print(numpy.__file__); import scipy; print(scipy.__file__)'
3.8.0 (default, May  9 2020, 17:47:23) 
[GCC 9.3.0]
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'

C'est un peu arrogant, mais on peut voir la même chose en changeant Python avec ʻupdate-alternatives`.

$ sudo update-alternatives --config python
[sudo] password for kohei: 
There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                       Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8          3         auto mode
* 1            /opt/Python-3.6.10/python   1         manual mode
  2            /opt/Python-3.8.0/python    2         manual mode
  3            /usr/bin/python3.8          3         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /opt/Python-3.8.0/python to provide /usr/bin/python (python) in manual mode
kohei@kohei-VirtualBox:~$ 
kohei@kohei-VirtualBox:~$ which python
/usr/bin/python
kohei@kohei-VirtualBox:~$ python -V
Python 3.8.0
kohei@kohei-VirtualBox:~$ 
kohei@kohei-VirtualBox:~$ python -c 'import sys; print(sys.version); import numpy; print(numpy.__file__); import scipy; print(scipy.__file__)'
3.8.0 (default, May  9 2020, 17:47:23) 
[GCC 9.3.0]
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
kohei@kohei-VirtualBox:~$ 

Bien sûr, n'oubliez pas de revenir à la version originale de Python à la fin.

kohei@kohei-VirtualBox:~$ sudo update-alternatives --config python
There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                       Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8          3         auto mode
  1            /opt/Python-3.6.10/python   1         manual mode
* 2            /opt/Python-3.8.0/python    2         manual mode
  3            /usr/bin/python3.8          3         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /opt/Python-3.6.10/python to provide /usr/bin/python (python) in manual mode

kohei@kohei-VirtualBox:~$ which python
/usr/bin/python
kohei@kohei-VirtualBox:~$ python -V
Python 3.6.10

Les références

Recommended Posts

Gérez plusieurs versions de Python avec des alternatives de mise à jour (Ubuntu)
Utiliser plusieurs versions de l'environnement python avec pyenv
Développé et vérifié avec plusieurs versions de python avec direnv
Gérez plusieurs gestionnaires de contexte avec Python contextlib.
Gérez les tâches cron avec python
Gérez l'environnement python avec virtualenv
Créer un environnement python3 avec ubuntu 16.04
Installer plusieurs versions de Python
[Package cloud] Gérez les packages python avec le package cloud
Publiez plusieurs images Twitter avec python
Animez plusieurs images fixes avec Python
Gérez chaque version de Python avec Homebrew
[Python] Création de plusieurs fenêtres avec Tkinter
Gérez plusieurs versions de python en un seul jupyter
[Pyenv] Construire un environnement python avec ubuntu 16.04
[Ubuntu 18.04] Créer un environnement Python avec pyenv + pipenv
Traiter plusieurs listes avec for en Python
Question: l'intégration multiple par python ne fonctionne pas
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Créer un environnement python avec pyenv sur EC2 (ubuntu)
Grattage avec Python
Python avec Go
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
Vous pouvez gérer les caractères qui se chevauchent avec plusieurs plt.text.
Intégrer avec Python
Changer de version de Python
AES256 avec python
Testé avec Python
python commence par ()
Gérez bien AWS avec la bibliothèque Python Boto
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
[Python] Traitement de plusieurs erreurs d'appel dans ray.init
Convertissez plusieurs fichiers proto à la fois avec python
[Python] Mention à plusieurs personnes avec l'API de Slack
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
Écrire plusieurs enregistrements dans DynamoDB avec Lambda (Python, JavaScript)
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Gérez les packages d'exécution Python et les packages d'environnement de développement avec Poetry
Supprimer les en-têtes de fichiers CSV à plusieurs formats avec python
Communication série avec Python
Zip, décompressez avec python
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Sélection multiple avec Jupyter
Grattage en Python (préparation)
Essayez de gratter avec Python.
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Résolvez AtCoder 167 avec python
Communication série avec python