Контролировать версию pip в virtualenv

Как я могу управлять версией pip которая используется в только что созданной виртуальной среде? Я считаю, что я уничтожил все другие версии пипса из ОС, но все же mkvirtualenv получает пип-1.5 откуда-то! Я хочу, чтобы он использовал pip 1.4.1 в virtualenv.

 $ which pip /usr/local/bin/pip $ pip --version pip 1.4.1 from /usr/local/lib/python2.7/dist-packages/pip-1.4.1-py2.7.egg (python 2.7) $ pip install virtualenv virtualenvwrapper <snip...> Successfully installed virtualenv virtualenvwrapper Cleaning up... $ source ~/.bashrc $ mkvirtualenv spam New python executable in spam/bin/python Installing setuptools, pip...done. (spam)$ which pip /home/wim/.virtualenvs/spam/bin/pip (spam)$ pip --version pip 1.5 from /home/wim/.virtualenvs/spam/local/lib/python2.7/site-packages (python 2.7) 

Достаточно легко заменить пип, который устанавливается в вашей виртуальной среде. С активной виртуальной средой просто скажите

  pip install pip==1.4.1 

Из чтения источника virtualenv, похоже, что pip установлен из исходного tarfile, включенного в virtualenv. В virtualenv 1.10.1 это файл pip-1.4.1.tar.gz в pip-1.4.1.tar.gz site-packages/virtualenv_support (он получает setuptools из одного и того же места). Вы можете реально заменить этот архив для управления версией; virtualenv.py, по крайней мере версия, которую я имею, не заботится о том, какая версия пипа есть:

  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 / virtualenv / virtualenvwrapper на своей машине (не внутри virtualenv). Впоследствии созданные virtualenvs имели обновленную версию.

 deactivate pip install --upgrade pip virtualenv virtualenvwrapper mkvirtualenv ...