今回はプログラム言語のPythonの話です。

筆者は最近は趣味の範囲ではありますが、
Pythonでちょこちょこと個人の作業用のツールだったり、
ビットコインの収集と解析での開発にPythonを利用しています。

このPythonの仮想環境について、これまでその存在自体はある程度知っていましたが、
自分の開発ではあまり意識していませんでした。

ところが先日、ManjaroLinux環境に自前のsystemdサービスを追加する際、
気が付きました。

Build a virtual environment for development with Python!!



というのも、systemdで動かすということはrootユーザでの実行になります。

Pythonでは各種のライブラリやフレームワークが多く出ているのが魅力なのですが、
そのライブラリのバージョンや依存するライブラリもあって複雑な互換性が出るケースもあります。

単一のユーザで使っていてさえ、
なぜかライブラリをバージョンアップできなくなったり、
他のライブラリの依存性で動作しなくなることもあります。

そうです、今回はsystemdとして、
つまりrootでpythonアプリを動かす際になって初めて、
仮想環境という必要性を感じました。

というわけで、前置きが長くなりましたが、

今回はPythonでの「仮想環境の作り方」、「仮想環境への入り方」、
「仮想環境の終了の仕方」について筆者の作業記録を振り返りつつ、
紹介していきます。


Pythonでの仮想環境の作り方

以下コマンドを実行します。

$ python -m venv .testenv

ここで少し待ちます。プロンプトが出れば完了です。

Pythonでの仮想環境への入り方

以下コマンドを実行します。

$ source .testenv/bin/activate

すると、左に(.testenv)と表示されます。

これで仮想環境に入ったことになります。

ここで以下コマンドでpipのリストを確認してみます。

$ python -m pip list

はい、2つのpackageしか表示されませんね。
しかもpipが古いですと言われています。
やはり別世界に入っていますね。

Pythonの仮想環境を終了させる

それでは、仮想環境から出てみます。
以下コマンドを打ち込みます。

$ deactivate

はい、(.testenv)のワールドから戻れましたね。

ここでpip listを出してみます。
再度以下コマンドを実行します。

$ python -m pip list

たくさん表示されました。
これで先程の仮想環境は他のpackageライブラリの
影響を受けない環境だということがわかりました。


これ、試してみてからはいいなと思うようになりました。
まだ使ったことなかった方は使ってみてください。

では、シェルから仮想環境に入ってスクリプト実行するには?
となると思いますが、以下で実現できました。

#!/bin/bash
source /opt/.testenv/bin/activate
python samplepj1/sample.py
deactivate

何かの参考になれば幸いです。