Python : venv + pip 編
基本
- Pythonで書かれたソフトウェアは pip というソフトウェア (Ubuntu の
aptの Python版だと思えば良い) でインストールできることが多い - ただし最近の
pipは全ユーザ共通のディレクトリ (/usr/localなど) へのインストールを非推奨 (最近は禁止に近い) としており, 個人のディレクトリへ, それも venv (仮想環境. 仮想マシンと紛らわしいが, つまりは目的に応じて複数の Python 環境を持てる仕組み) というものを組み合わせて指定した環境へインストールすることを前提にしている - Pythonプログラムは通常「ビルド」という手順は不要で,
pipもソースコード (.py) をインストールするので原理的にはpipでソースコードを入手可能だが, 通常は git でダウンロードする - git でソースコードをダウンロードした場合も
pipを使ってそのソースコードを適切な場所に配置するため結局pipが必要となる - そこで以下では venv, pip, ビルド手順, の順に説明する
- 動画で概要を見たい人用 (倍速推奨)
venv : virtual env
- Pythonのvenv は, 目的に応じた複数の Python 環境 (ここでは環境 = インストールされているパッケージの集合のことだと思えば良い) を持つことができる仕組み
- 最初に, システム共通の
pythonコマンド (python3という名前の場合もある) が使える状態を前提とする
$ which python
/usr/bin/python # システム共通の python
- ここで以下
$ python -m venv my_env
を実行すると,
my_envというフォルダが作られ, まっさらなPython環境がその下に作られる. 続けて- ここで以下
$ . my_env/bin/activate
を実行すると, my_env下のPython環境が使われるようになる
- 具体的には以下のように,
my_env下のpythonコマンドやpipコマンドが使われるようになる
$ which python
/ ... /my_env/bin/python # 絶対パス名
$ which pip
/ ... /my_env/bin/pip # 絶対パス名
- 仕組みは単純で,
PATHという環境変数で,my_env/binディレクトリが先に検索されるようにしているだけである
$ echo $PATH
- この
pipコマンドはパッケージをmy_env下にインストールするし,pythonコマンドはimport文を実行する際にmy_env下でモジュールを探す my_envディレクトリを消せばそのPython仮想環境は跡形もなく消える
余談: venvディレクトリの場所と名前
- venv でディレクトリ (上記の
my_env) を作る際にどこになんという名前で作るのが良いのだろう? 世の中では主に2つの流儀があるようである- プロジェクトに特化したディレクトリを, ソースツリー内に決まった名前 (e.g.,
.venv)で作る (venvという名前は避けておくのが無難だろう) - ホームディレクトリ直下に
~/.venvsのようなディレクトリを作りその下に集める なおどちらの場合も,.から始めることが世の中の慣習になっているようだが, 積極的な理由があるのか不明
- プロジェクトに特化したディレクトリを, ソースツリー内に決まった名前 (e.g.,
pip : Pythonのパッケージインストーラ
- pip であるPythonパッケージを見つけたら
pip install パッケージ名
でインストール可能
- ファイルは実行した
pipコマンドと同じPython環境内に配置される
パッケージの検索
- かつては
pip search 文字列というコマンドで検索できていたがあるときからその機能が廃止され, https://pypi.org/ から探せということになった (理解不能)
ビルド
- 通常はそのプロジェクトの github レポジトリが存在しているので git clone する (やり方はソースコードのダウンロード を参照
- ソースツリーのトップレベルに
pyproject.toml,setup.py,setup.cfgのどれかが見つかったら
$ pip install -e .
とすれば, ビルド(と言っても Pythonであればコンパイルは不要)及び, ファイルの配置が行われる
- なお,
-e(editable) オプションをつけると, ファイルのコピーは行われず, ソースツリー中のファイルがそのまま参照される- 本来インストールされる場所からソースツリー中にシンボリックリンク・ショートカットのようなものができるとイメージすればよい
- ソースコードを修正すればそれがそのまま反映されるので, 開発するのに便利
練習
- Pythonのライブラリ
artのgithubレポジトリを見つけ, - コードをダウンロード (git clone),
pip install -eで開発用インストールを行ってみよ