pipを含まない仮想環境に、グローバルなpipでパッケージをインストールする(『ハイパーモダンPython』読書メモ) (original) (raw)

はじめに

祝・ミリアニ1周年! nikkieです。

以前、_pipを含まない仮想環境にパッケージをインストール_しました1

『ハイパーモダンPython』を読んでいて、別解を知りました。

目次

pipを含まない仮想環境を作る

python -m venv .venv --without-pipで作れます!2

pyenvで管理する環境で試します。
私の環境はmacOS(シェルはzsh)です。

% tempdir=$(mktemp -d) % cd $tempdir % pyenv local 3.12.6 % python -m venv .venv --without-pip % .venv/bin/python -m pip list /.../.venv/bin/python: No module named pip

『ハイパーモダンPython』より、pipの--python引数

$ pip --python=<env> install <package>
2つ目の方法には、すべての環境でpipを必要としないという利点があります。(2.1)

(「2つ目の方法」とは、直前のpip --python=...です)

上記の続きとして手を動かします。
pyenvによりpipは有効です(グローバルのpip)。

% pip --version pip 24.2 from /.../.pyenv/versions/3.12.6/lib/python3.12/site-packages/pip (python 3.12)

--python引数を試します。

% pip --python=.venv install kojo-fan-art Successfully installed kojo-fan-art-0.1.1

pipのない.venvにインストールされたことを確認できます。

% pip --python .venv list Package Version


kojo-fan-art 0.1.1

pip 22.3より--python追加

https://pip.pypa.io/en/stable/news/#v22-3

Add a --python option to allow pip to manage Python environments other than the one pip is installed in. (#11320)

2年前に追加されたオプションのようです。

終わりに

『ハイパーモダンPython』きっかけで、pipを含まない仮想環境にグローバルのpipを使ってパッケージをインストールする方法を知りました。
pip--pythonオプションに、pipを含まない仮想環境(.venv)を渡します。

pipのない仮想環境はかつてRyeのソースコードを読んでいて知ったのですが、この記事の内容を元により単純な方法が提案できるかもしれません。
なお、グローバルなpipやPythonには環境変数PATHや私の環境ではpyenvが関わるのですが、そこは『ハイパーモダンPython』の1章で理解が深まりました。