答えは◯(マル)
pipを含まない仮想環境は、作れます!
なお、この知見は「へぇ」レベルで、Pythonを使っていく上では役に立たないと思います(ここで引き返してもええんやで)。
目次
標準ライブラリのvenvの場合
https://docs.python.org/ja/3/library/venv.html#creating-virtual-environments
--without-pip
オプションがあります!
通常の作り方2
% python -m venv venv/with_pip % source venv/with_pip/bin/activate (with_pip) % python -m pip list Package Version ---------- ------- pip 23.1.2 setuptools 65.5.0
--without-pip
を指定する場合
% python -m venv venv/no_pip --without-pip % source venv/no_pip/bin/activate (no_pip) % python -m pip list /.../venv/no_pip/bin/python: No module named pip
pipがない仮想環境ができました!
サードパーティライブラリvirtualenvの場合
標準ライブラリにvenvが入った際、「サードパーティのvirtualenvに(仮想環境の概念や実装が)インスパイアされた」という一節があります。
https://docs.python.org/ja/3/whatsnew/3.3.html#pep-405-virtual-environments
Their concept and implementation are inspired by the popular virtualenv third-party package,
virtualenvも、pipを含めない仮想環境を作れます!
使うのは、--no-seed
オプション、または、--without-pip
オプション(どちらかを指定すればOK)
https://virtualenv.pypa.io/en/stable/cli_interface.html#no-seed
do not install seed packages
seed packagesとは
- pip
- setuptools
- wheel
のこと。
ref: https://virtualenv.pypa.io/en/stable/user_guide.html#introduction (Phase 2 参照)
上記のwith_pip仮想環境にvirtualenvをインストールして実験します。
% source venv/with_pip/bin/activate (with_pip) % python -m pip install virtualenv (with_pip) % python -m pip freeze distlib==0.3.8 filelock==3.13.1 platformdirs==4.1.0 virtualenv==20.25.0
通常の作り方
(with_pip) % virtualenv virtenv/virt_with_pip # 以下のログは一部抜粋 added seed packages: pip==23.3.1, setuptools==69.0.2, wheel==0.42.0 (with_pip) % source virtenv/virt_with_pip/bin/activate (virt_with_pip) % python -m pip list Package Version ---------- ------- pip 23.3.1 setuptools 69.0.2 wheel 0.42.0
--no-seed
を指定する場合
(with_pip) % virtualenv virtenv/virt_no_pip --no-seed (with_pip) % source virtenv/virt_no_pip/bin/activate (virt_no_pip) % python -m pip list /.../virtenv/virt_no_pip/bin/python: No module named pip
virtualenvでも、pipがない仮想環境ができました!
終わりに
pipを含めない、Pythonの仮想環境の作り方を書きました。
python -m venv venv --without-pip
virtualenv venv --no-seed
P.S. きっかけはRye
Ryeはvirtualenvを使っています3。
https://rye-up.com/guide/basics/#working-with-the-project より
To activate the virtualenv, use the standard methods:
. .venv/bin/activate
この案内を見て、「virtualenvが作るのは(venvと同様の)仮想環境だから、pip
を使えばインストールされているライブラリを見られるよなー」と考えました。
素振りの地で試してみると
% source .venv/bin/activate (unko-by-rye) % python -m pip list /.../unko-by-rye/.venv/bin/python: No module named pip
pip が な い !!!
これをどうやっているのか実装を見たところ、pipを含まない仮想環境を作れるオプションを知ったのです。
rye sync
で仮想環境を扱っています。
https://github.com/mitsuhiko/rye/blob/0.16.0/rye/src/sync.rs#L304
virtualenv
コマンドを組み立てるところで、--no-seed
を指定しています