[LINUX] Verwalten Sie mehrere Python-Versionen mit Update-Alternativen (Ubuntu)

Sie müssen verschiedene Bibliotheken von Drittanbietern verwenden und möchten Folgendes erreichen:

(Ich möchte VirtualBox verwenden, um Ubuntu auf einem Mac auszuführen und zu experimentieren, um die oben genannten Ziele zu erreichen, um laufende Projekte nicht zu beeinträchtigen.)

Als ersten Schritt werden wir (1) und (2) durchführen.

(0) Umwelt


$ 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


#-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


#-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

#(1) Verwenden Sie mehrere Python-Versionen ordnungsgemäß (Python 2.7, 3.6, 3.8 usw.). Sie können sehen, dass Python3 in dieser Phase "Python3.8" (Python 3.8.2) ist. (Ich habe es nachgeschlagen und festgestellt, dass es sich in `/ usr / bin /` befindet.) Als nächstes verlinken Sie aus der Liste unter https://www.python.org/ftp/python/ auf die erforderliche Python-Version. Suchen und verwenden Sie wget zum Herunterladen nach `/ opt /`. Zuerst Python Überprüfen Sie dann das Python-Verzeichnis
$ 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

Sie können sehen, dass / etc / alternatives / python eine symbolische Verknüpfung zu dem Pfad ist, der dem benutzerdefinierten Python entspricht (in diesem Fall / opt / Python-3.6.10 / python).

Zusammenfassung,

Als nächstes aktualisieren Sie pip, indem Sie die folgenden Schritte ausführen.

#Bestätigung
$ which python
/usr/bin/python
#Bestätigung
$ 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) Installieren Sie die Bibliothek für jede Python-Version separat

Von nun an werde ich für jede Python-Version einzeln eine Bibliothek hinzufügen. Das Verfahren ist wie folgt.

#Bestätigung
$ which python
/usr/bin/python
#Bestätigung
$ 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

#Überprüfen Sie das Ergebnis.
$ 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

Als Referenz sehen wir uns an, was sich in / usr / local / lib / python3.6 / site-packages / befindet.

$ 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

Als weitere Referenz sehen wir uns an, dass diese Installation von numpy scipy nur Python 3.6.10 betrifft (wie beabsichtigt). Natürlich habe ich Python 3.8.0 nicht berührt, also sieht es so aus:

$ /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'

Es ist ein bisschen arrogant, aber das gleiche kann man sehen, wenn man Python durch "Update-Alternativen" wechselt.

$ 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:~$ 

Vergessen Sie natürlich nicht, am Ende auf die ursprüngliche Python-Version zurückzugreifen.

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

Verweise

Recommended Posts

Verwalten Sie mehrere Python-Versionen mit Update-Alternativen (Ubuntu)
Verwenden Sie mit pyenv mehrere Versionen der Python-Umgebung
Entwickelt und verifiziert mit mehreren Python-Versionen mit direnv
Verwalten Sie mehrere Kontextmanager zusammen mit Python contextlib.ExitStack
Verwalten Sie Cron-Jobs mit Python
Verwalten Sie die Python-Umgebung mit virtualenv
Erstellen Sie eine Python3-Umgebung mit Ubuntu 16.04
Installieren Sie mehrere Versionen von Python
[Paketwolke] Verwalten Sie Python-Pakete mit der Paketwolke
Veröffentlichen Sie mehrere Twitter-Bilder mit Python
Animieren Sie mehrere Standbilder mit Python
Verwalten Sie jede Python-Version mit Homebrew
[Python] Erstellen mehrerer Fenster mit Tkinter
Behandeln Sie mehrere Python-Versionen in einem Jupyter
[Pyenv] Erstellen einer Python-Umgebung mit Ubuntu 16.04
[Ubuntu 18.04] Erstellen Sie eine Python-Umgebung mit pyenv + pipenv
Verarbeiten Sie mehrere Listen mit for in Python
Frage: Die Mehrfachintegration mit Python funktioniert nicht
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Erstellen Sie eine Python-Umgebung mit pyenv auf EC2 (Ubuntu)
Scraping mit Python
Python mit Go
[Python] Zeichnen mehrerer Diagramme mit Matplotlib
Sie können überlappende Zeichen mit mehreren plt.texts verwalten.
In Python integrieren
Python-Versionen wechseln
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
Verwalten Sie AWS mit der Python-Bibliothek Boto
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
[Python] Umgang mit mehreren Aufruffehlern in ray.init
Konvertieren Sie mehrere Protodateien gleichzeitig mit Python
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Schreiben Sie mit Lambda (Python, JavaScript) mehrere Datensätze in DynamoDB.
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Verwalten Sie Python-Laufzeitpakete und Entwicklungsumgebungspakete mit Poetry
Entfernen Sie Überschriften aus CSV-Dateien mit mehreren Formaten mit Python
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Mehrfachauswahl mit Jupyter
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python