「Webサイト開設メモ」で構築したサーバー環境に、Pythonの利用環境を整備しました。その時の手順のメモです。
Pythonのバージョン
python のバージョンを確認します。
[root@^ ~]# python --version
-bash: python: コマンドが見つかりません
※「Webサイト構築メモ」を実行してきた前提。他の手続きを経てきた場合は、すんなりと問題なく表示されるかもしれません。
現時点でインストールされている Python を確認します。
[root@^ ~]# alternatives --config python
2 プログラムがあり 'python' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/libexec/no-python
2 /usr/bin/python3
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 2
「2」を選択(Let’s Encryptを導入した時にインストールされたもの)して、再度 python のバージョンを確認します。
[root@^ ~]# python --version
Python 3.6.8
以下、ユーザー「python」がホームディレクトリに Python環境を作成する場合を想定します。
※ホームディレクトリが /home/python になるだけで、それ以外、ユーザーが誰だろうと関係ありません…
仮想環境の作成、有効化と終了
venv コマンドを使って、仮想環境 venv-1 を作ります。
[python@^ ~]$ python -m venv venv-1
仮想環境 venv1 を有効にして、pythonのバージョンを確認します。
[python@^ ~]$ source venv-1/bin/activate
(venv-1) [python@^ ~]$ python --version
Python 3.6.8
なお、仮想環境を有効にするときの ‘ source ‘ は、’ . ‘ だけでもOKです。
[python@^ ~]$ . venv-1/bin/activate
仮想環境を終了します。
(venv-1) [python@^ ~]$ deactivate
[python@^ ~]$
異なるバージョンのPythonのインストール
python3.8 をインストールします。
【注】パッケージ名は「python38」、コマンドは「python3.8」となるので注意
[root@^ ~]# dnf install python38
メタデータの期限切れの最終確認: 3:47:59 時間前の 2021年08月23日 13時34分27秒 に 実施しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン Repo サイズ
================================================================================
インストール:
python38 x86_64 3.8.8-3.module_el8.5.0+871+689c57c1 appstream 79 k
依存関係のインストール:
python38-libs x86_64 3.8.8-3.module_el8.5.0+871+689c57c1 appstream 8.3 M
python38-pip-wheel noarch 19.3.1-3.module_el8.5.0+855+e844d92d appstream 1.2 M
python38-setuptools-wheel
noarch 41.6.0-4.module_el8.5.0+742+dbad1979 appstream 304 k
弱い依存関係のインストール:
python38-pip noarch 19.3.1-3.module_el8.5.0+855+e844d92d appstream 1.9 M
python38-setuptools
noarch 41.6.0-4.module_el8.5.0+742+dbad1979 appstream 667 k
モジュールストリームの有効化中:
python38 3.8
トランザクションの概要
================================================================================
インストール 6 パッケージ
ダウンロードサイズの合計: 12 M
インストール後のサイズ: 45 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/6): python38-3.8.8-3.module_el8.5.0+871+689c 247 kB/s | 79 kB 00:00
(2/6): python38-pip-19.3.1-3.module_el8.5.0+855 3.6 MB/s | 1.9 MB 00:00
(3/6): python38-pip-wheel-19.3.1-3.module_el8.5 2.3 MB/s | 1.2 MB 00:00
(4/6): python38-setuptools-41.6.0-4.module_el8. 1.7 MB/s | 667 kB 00:00
(5/6): python38-setuptools-wheel-41.6.0-4.modul 971 kB/s | 304 kB 00:00
(6/6): python38-libs-3.8.8-3.module_el8.5.0+871 4.4 MB/s | 8.3 MB 00:01
--------------------------------------------------------------------------------
合計 5.1 MB/s | 12 MB 00:02
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : python38-setuptools-wheel-41.6.0-4.module_el8.5.0+74 1/6
インストール中 : python38-pip-wheel-19.3.1-3.module_el8.5.0+855+e844d 2/6
インストール中 : python38-libs-3.8.8-3.module_el8.5.0+871+689c57c1.x8 3/6
インストール中 : python38-3.8.8-3.module_el8.5.0+871+689c57c1.x86_64 4/6
scriptletの実行中: python38-3.8.8-3.module_el8.5.0+871+689c57c1.x86_64 4/6
インストール中 : python38-setuptools-41.6.0-4.module_el8.5.0+742+dbad 5/6
scriptletの実行中: python38-setuptools-41.6.0-4.module_el8.5.0+742+dbad 5/6
インストール中 : python38-pip-19.3.1-3.module_el8.5.0+855+e844d92d.no 6/6
scriptletの実行中: python38-pip-19.3.1-3.module_el8.5.0+855+e844d92d.no 6/6
検証 : python38-3.8.8-3.module_el8.5.0+871+689c57c1.x86_64 1/6
検証 : python38-libs-3.8.8-3.module_el8.5.0+871+689c57c1.x8 2/6
検証 : python38-pip-19.3.1-3.module_el8.5.0+855+e844d92d.no 3/6
検証 : python38-pip-wheel-19.3.1-3.module_el8.5.0+855+e844d 4/6
検証 : python38-setuptools-41.6.0-4.module_el8.5.0+742+dbad 5/6
検証 : python38-setuptools-wheel-41.6.0-4.module_el8.5.0+74 6/6
インストール済み:
python38-3.8.8-3.module_el8.5.0+871+689c57c1.x86_64
python38-libs-3.8.8-3.module_el8.5.0+871+689c57c1.x86_64
python38-pip-19.3.1-3.module_el8.5.0+855+e844d92d.noarch
python38-pip-wheel-19.3.1-3.module_el8.5.0+855+e844d92d.noarch
python38-setuptools-41.6.0-4.module_el8.5.0+742+dbad1979.noarch
python38-setuptools-wheel-41.6.0-4.module_el8.5.0+742+dbad1979.noarch
完了しました!
# インストールされているpythonの確認
[root@^ ~]# alternatives --config python
3 プログラムがあり 'python' を提供します。
選択 コマンド
-----------------------------------------------
* 1 /usr/libexec/no-python
+ 2 /usr/bin/python3
3 /usr/bin/python3.8
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:(そのままEnter)
alternatives の設定は変更していないので、「python」コマンドで起動するpythonのバージョンは3.6のままです。特定のバージョンを起動したいときは、バージョンを明示的に指定して起動します。
[root@^ ~]# python --version
Python 3.6.8
[root@^ ~]# python3 --version
Python 3.6.8
[root@^ ~]# python3.6 --version
Python 3.6.8
[root@^ ~]# python3.8 --version
Python 3.8.8
バージョンを指定したPython仮想環境の作成
特定のバージョンの仮想環境を作成したいときは、作成時にバージョンを明示的に指定します。バージョンを指定しない場合は(venv-1 の例のように)alternatives の設定に依存することになります。
バージョン3.6を指定して仮想環境 venv-2 を作成します。
[python@^ ~]$ python3.6 -m venv venv-2
[python@^ ~]$ source venv-2/bin/activate
(venv-2) [python@^ ~]$ python --version
Python 3.6.8
(venv-2) [python@^ ~]$ deactivate
仮想環境 venv-2 の下では、pythonのバージョンは3.6となります。
同様に、バージョン3.8を指定して仮想環境 venv-3 を作成します。
[python@^ ~]$ python3.8 -m venv venv-3
[python@^ ~]$ source venv-3/bin/activate
(venv-3) [python@^ ~]$ python --version
Python 3.8.8
仮想環境 venv-3 の下では、pythonのバージョンは3.8となります。 ちなみに、このpythonの所在を確認しておきます。
(venv-3) [python@ ~]$ which python
~/venv-3/bin/python
仮想環境 venv-3/bin/python が起動しています。
仮想環境を終了します。
(venv-3) [python@^ ~]$ deactivate
[python@^ ~]$
仮想環境の削除
仮想環境を削除したいときは、作成した仮想環境のディレクトリを削除するだけです。
[python@^ ~]$ rm -Rf venv-1
仮想環境の複製
仮想環境に多数のライブラリがインストールされている場合に、その環境を複製する方法です。
例として、仮想環境 venv-3 に numpy,pandasをインストールします。
# 仮想環境 venv-3 の有効化
[python@^ ~]$ source venv-3/bin/activate
# ライブラリをインストール
(venv-3) [python@^ ~]$ pip install numpy
・・・・・
・・・・・
Installing collected packages: numpy
Successfully installed numpy-1.19.5
(venv-3) [python@^ ~]$ pip install pandas
・・・・・
・・・・・
Installing collected packages: six, pytz, python-dateutil, pandas
Successfully installed pandas-1.3.2 python-dateutil-2.8.2 pytz-2021.3 six-1.16.0
pip freeze を使って、venv-3 にインストールされているライブラリの一覧を確認します。
(venv-3) [python@^ ~]$ pip freeze
numpy==1.19.5
pandas==1.3.2
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
この環境を、新しく作成する仮想環境 venv-33 に複製したい、とします。この時は以下の処理を順に実行していきます。
・venv-3 のライブラリ一覧をファイル出力(ここではファイル名:requirements.txt とします。)
・venv-33 の作成
・requirements.txt をもとにして、venv-33 にライブラリをインストール
# 仮想環境 venv-3 のライブラリ一覧を出力
(venv-3) [python@^ ~]$ pip freeze > requirements.txt
# venv-3 終了
(venv-3) [python@^ ~]$ deactivate
# 仮想環境 venv-33 作成・有効化
[python@^ ~]$ python3.8 -m venv venv-33
[python@^ ~]$ source venv-33/bin/activate
# venv-33 のライブラリ確認
(venv-33) [python@^ ~]$ pip freeze
# まだライブラリはないので何も表示されない
# venv-33 にライブラリをインストール
(venv-33) [python@^ ~]$ pip install -r requirements.txt
・・・・・
・・・・・
Installing collected packages: numpy, six, python-dateutil, pytz, pandas
Successfully installed numpy-1.19.5 pandas-1.3.2 python-dateutil-2.8.2 pytz-2021.3 six-1.16.0
# インストールされたライブラリの確認
(venv-33) [python@^ ~]$ pip freeze
numpy==1.19.5
pandas==1.3.2
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
コピー元と同じ仮想環境を作成することができました。
この例ではライブラリが少ないので、複製のメリットはほとんどありませんが、多くのライブラリをインストールしていた場合には有効です。
参考
RHEL8系ディストリビューションでPython 3を使う
pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。
【Python】venvで作成した仮想環境をコピーする方法