概要
Python を使うなら仮想環境も使いましょう、という話。
経緯
AWS CDK について勉強しようと思い、環境構築に手を付けた。
Python での CDK 環境構築の要件として venv があったので、venv の基本的な使い方を勉強する必要が出てきた。Python の仮想環境としては、Anaconda の環境をちょっと触ったことくらいしかなく、venv は存在を知っていながら使ったことがなかった。
今回、AWS CDK を使用するために、必要に駆られて venv を学習することになったが、venv を触っていたところ、とある疑問が解消された。
それは、「Python3 を実行する際に使用されるコマンドとして、”python3
” と “python
” の2種類があるのはなぜか」という疑問だ。
前提
Python を使用する上で必ず理解しておかなければならないのは、Python3 とは記法が異なる Python2 が存在することだ。
Python2 と Python3 が混在していた頃、自分の理解は次の通りだった。
python
:Python2 系を実行するpython3
:Python3 系を実行する
実際、Python2 のサポートが切れるまでは、Ubuntu で “python
” を実行すると Python2.7 とかのインタプリタが起動していた記憶がある。Python がデフォルトでインストールされている Ubuntu (22.04 LTS) にて、”python
“、”python3
” を実行すると次のようになる。
$ python
Command 'python' not found, did you mean:
command 'python3' from deb python3
command 'python' from deb python-is-python3
$ python3
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
デフォルトでは、”python3
” というコマンドで Python3 を実行できるようになっている。
※ “python
” では、必ず Python2 が実行されるというわけではないらしい。
Python2 の場合は python2 コマンド、Python3 の場合は python3 コマンドを使います。
Linux のディストリビューションによっては、python コマンドが python2 または python3 のシンボリックリンクになっている場合があります。
Python スクリプト実行方法:https://aznote.jakou.com/python/run.html
2種類のコマンド
ここからが問題。
Python3 の実行方法を記載しているサイトを検索すると、”python3
” を使っているサイトもあれば、”python
” を使っているサイトもある。
“python3
” を使っているページの例
“python
” を使っているページの例
解決方法?
先ほど紹介したように、デフォルトでは、”python3
” コマンドを使用して Python3 を実行する。
では、”python
” コマンドを使っている人はどのようにしているのか。
検索してみると、いくつかの方法が見つかる。
単純に、エイリアス alias python="python3"
を設定しているもの。
alternatives
コマンドを使用しているもの。これはやったことがない。
python-is-python3 パッケージを使用するもの。
エイリアスを張る方法や python-is-python3 を使用する方法は知っていたが、広く使われている方法ではないのでは、と感じた。自分でエイリアスを設定していたとして、説明なしにそのままサイトに載せないような気がするし、python-is-python3 が一般的なのならもっと知名度がある気がする。
そんな疑問を抱きつつ、エイリアスを使用したりして、 “python
” コマンドで Python3 を使っていた。
おそらく最適解
疑問解消
抱えていた疑問を忘れかけていたころに、仮想環境 venv に触れることになった。
結論から言うと、“python
” で Python3 を実行する方法の最適解は、Python の仮想環境を使用することだと思う。
仮想環境を使用することで、アプリケーション毎に個別の Python 環境を用意することができる。仮想環境を使用しない場合、1つの Python 環境しか管理できず、パッケージの競合等が起こったときに面倒くさいことになる。
従って、Python を勉強するなら仮想環境の導入をおすすめする。
venv により作成した仮想環境を有効化し、”python
” コマンドを実行すると次のようになる。
(.venv) $ python
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
venv の仮想環境では、”python
” コマンドで Python3 が実行できる。
個人的な予想だが、“python
” で Python3 を実行している人は、何かしらの仮想環境を導入していると思う。先程、”python
” コマンドを使っている例として挙げたページも、Anaconda という仮想環境を使用していた。
そういえば、自分が Anaconda を使っていたときも、”python
” で Python3 を実行していた。
使用方法
今回は venv を使用する必要があったので、venv について解説する。
Ubuntu にて venv をインストールする方法は次の通り。
$ sudo apt install -y python3-venv
ディレクトリを作成し、ディレクトリ内で名前を指定して仮想環境を作成する。
$ mkdir pj
$ cd pj
$ python3 -m venv .venv
仮想環境の情報は、指定したディレクトリ(今回は .venv/
)の下に全て保存されるため、Python コード等と共に pj/
の下で管理する、といったことができる。もちろん、別ディレクトリに作成すれば、仮想環境だけを分けて管理することもできる。
仮想環境の有効化・無効化は次の通り。
$ source ~/.venv/bin/activate # 有効化
(.venv) $ # プロンプトに仮想環境名が表示される。
(.venv) $ deactivate # 無効化
$ # プロンプトが元に戻る。
以上で、仮想環境を使用することができる。
まとめ
“python
” コマンドを使いたいなら、仮想環境を導入しましょう。
“python3
” コマンドを使うので良くても、仮想環境を導入しましょう。
Python を勉強するなら、仮想環境を導入しましょう。
感想
AWS CDK を使うために環境構築をしようとしてたら、venv を触る羽目になって、思わぬ形で疑問が解消された。
Anaconda で環境を構築したときに、”python
” コマンドで Python3 が使用できることは認識していた。しかし、当時仮想環境を使いこなせていたわけではなかった(最初の方は1つの仮想環境しか使っていなかった)し、仮想環境がどれくらい一般的なものかも分かっていなかった。
今回の記事は、そんな当時の自分に読んでもらいたい。
仮想環境内には独立した1つの Python 実行環境がある、と考えると、仮想環境内での Python 実行時には、 Python2 系なのか Python3 系なのかを明示する必要がない。そのため、仮想環境では、バージョン指定のない “python
” コマンドでも問題がないのだろう。