新しく作成された pip
で使用されるvenv
のバージョンをどのように制御しますか?
デフォルトでは ベンダーのpip分布 を使用しますが、これは他の理由で古くなっている、または不適切である可能性があります。ユーザー指定のバージョンのpipがインストールされたvenv
を作成できるようにしたい最初に作成するのではなく、環境内からpipインストールをアップグレードします。
Stdlib venv
モジュールへの新しい追加は EnvBuilder.upgrade_dependencies
です。ただし、それは3.8.0リリースに間に合うようにvenv
コマンドラインインターフェイスに組み込まれませんでした。
残念ながら、これはユーザーが特定のpipバージョンをインストールするのを実際には助けません。最新のものだけです。
すべてが失われることはありません! venv
CLIは、ここで役立つ--without-pip
引数を提供します。これを使用してベンダーピップをオプトアウトし、実際にベンダーピップホイールを使用して目的のピップバージョンを(新しく作成した仮想環境で必要な他のパッケージとともに)インストールします。これは少し複雑なので、シェル関数に入れるのが最善です-これはシェルプロファイルまたはrcファイルに入れます。
function ve() {
local py="python3"
if [ ! -d ./.venv ]; then
echo "creating venv..."
if ! $py -m venv .venv --Prompt=$(basename $PWD) --without-pip; then
echo "ERROR: Problem creating venv" >&2
return 1
else
local whl=$($py -c "import pathlib, ensurepip; [whl] = pathlib.Path(ensurepip.__path__[0]).glob('_bundled/pip*.whl'); print(whl)")
echo "boostrapping pip using $whl"
.venv/bin/python $whl/pip install --upgrade pip setuptools wheel
source .venv/bin/activate
fi
else
source .venv/bin/activate
fi
}
書かれているように、この関数は最新のpip
、setuptools
、およびwheel
をインデックスからプルするだけです。特定のバージョンを強制するには、シェルスクリプトの次の行を変更します。
.venv/bin/python $whl/pip install --upgrade pip setuptools wheel
これに、例えば:
.venv/bin/python $whl/pip install pip==19.3.1
Python 2.7ユーザーの場合、virtualenv
が--no-pip
、--no-setuptools
、--no-wheel
に同様のコマンドラインオプションを提供し、ベンダーのPIPホイールがまだ利用可能であるため、同様のトリックを実行できますto bootstrap since Python 2.7.9 。Pathlibは使用できないため、pathlib
使用法をos.path
+ glob
に変換します。
私にとっては、自分のマシン(virtualenv内ではない)のpip/virtualenv/virtualenvwrapperをアップグレードしただけです。その後作成されたvirtualenvには更新されたバージョンがありました。
deactivate
pip install --upgrade pip virtualenv virtualenvwrapper
mkvirtualenv ...
Virtualenvのソースを読み取ると、pipはvirtualenvに含まれているソースtarfileからインストールされているようです。 virtualenv 1.10.1ではpip-1.4.1.tar.gz
の中に site-packages/virtualenv_support
ディレクトリ(同じ場所からsetuptools
を取得します)。バージョンを制御するために、そのアーカイブを適切に置き換えることができます。 virtualenv.py、少なくとも私が持っているバージョンは、どのバージョンのpipがそこにあるかを気にしません:
if not no_pip:
install_sdist('Pip', 'pip-*.tar.gz', py_executable, search_dirs)
--no-pip
オプションを選択して、ソースから必要なバージョンをインストールします。
Virtualenv 1.11では、ホイールファイルを検索します(例:pip-*.whl
)の代わりにtar.gz
、ただしそれ以外は同じように動作します(@wimの更新に感謝します)。
仮想環境にインストールされたPIPを置き換えるのは簡単です。アクティブな仮想環境内で、次のコマンドを実行します。
pip install pip==1.4.1
downgrade pipを使用してpipを実行することはできません。解決策は、仮想環境に特定のバージョンをインストールすることです。
virtualenv env -p python3.6 --no-pip
source env/bin/activate
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py pip==18.1
これにより、--process-dependency-links
ピップ19で削除されました。