Python利用環境構築メモ(その1)Python仮想環境を作成する

Python

「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で作成した仮想環境をコピーする方法



タイトルとURLをコピーしました