はじめに
祝・ミリアニ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章で理解が深まりました。
- Ryeの秘密です(ただし現在のRyeにも該当するかは追えていません) ↩
- https://docs.python.org/ja/3/library/venv.html#creating-virtual-environments↩