web-dev-qa-db-fra.com

Contrôler la version de pip dans virtualenv

Comment contrôler la version de pip utilisée dans un fichier virtualenv fraîchement créé? Je pense avoir éliminé toutes les autres versions de pip de l'OS, mais mkvirtualenv obtient toujours un pip-1.5 quelque part! Je veux qu'il utilise pip 1.4.1 dans le 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)
20
wim

Il est assez facile de remplacer le pip installé dans votre environnement virtuel. Dans votre environnement virtuel actif, exécutez simplement la commande suivante:

pip install pip==1.4.1
4
Wolf

Pour moi, je viens de mettre à niveau pip/virtualenv/virtualenvwrapper sur ma machine (pas à l'intérieur de virtualenv). Virtualenvs créé ultérieurement possédait la version mise à jour.

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

D'après la lecture du code source de virtualenv, il semblerait que pip soit installé à partir d'un fichier compressé source inclus avec virtualenv. Dans virtualenv 1.10.1, il s'agit de pip-1.4.1.tar.gz dans le répertoire site-packages/virtualenv_support (il obtient setuptools au même endroit). Vous pouvez éventuellement remplacer cette archive pour contrôler la version; virtualenv.py, du moins la version que j'ai, ne tient pas compte de la version de pip présente:

    if not no_pip:
        install_sdist('Pip', 'pip-*.tar.gz', py_executable, search_dirs)

Vous pouvez également passer l'option --no-pip, puis installer la version de votre choix.

Dans virtualenv 1.11, il recherche un fichier wheel (par exemple, pip-*.whl) au lieu d'un tar.gz, mais sa fonction est la même (merci à @wim pour la mise à jour).

13
Sam Hartsfield

Vous ne pouvez pas rétrograder pip à l'aide de pip, la solution consiste à installer une version spécifique dans votre environnement virtuel:

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

Cela vous permettra de continuer à utiliser --process-dependency-links qui a été supprimé dans le pip 19.

0
blueCat