2015-10-17 1 views
5

Sur mon système Windows 7, j'essaie d'installer autant de paquets en utilisant conda. Ils sont faciles à mettre à jour avecMettre à jour tous les paquets pip qui ne proviennent pas de conda

conda update all 

Malheureusement, certains paquets ne semblent pas Conda mais sont disponibles par le biais pip et donc pour ceux que j'installer les utiliser pip. La mise à jour de tous les paquets pip sur les fenêtres semble plus difficile mais

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i 

est un moyen que j'ai trouvé. Cependant, cela tente de mettre à jour tous les paquets, même ceux installés par conda je crois.

Existe-t-il un moyen de mettre à jour uniquement les paquets installés par pip?

Répondre

1

Ceci est difficile car les paquets Pip sont différents des paquets conda. Anaconda ajoute pip comme un choix d'installation et les met dans l'environnement mais il ne les gère pas. Pip est toujours sans une commande facile de mettre à niveau tous, mais quelques suggestions que vous avez essayé et ceci est une autre:

pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U 
+0

Merci pour cela, mais votre réponse ne fonctionnera pas sur Windows et n'empêche pas pip d'améliorer les paquets que conda gère-t-il? – eleanora

3

Voici ma tentative d'un script shell qui analysera la sortie de conda env export et mettre à jour tous les packages PIP:

#!/bin/sh 

############################################################################### 
# Script to scan an Anaconda environment and upgrade any PIP packages. 
# 
# Usage: 
# $ ./upgrade_pip_packages.sh 
# or explicitly give it an environment file to parse: 
# $ ./upgrade_pip_packages.sh <environment.yml file> 
# 
# Author: Marijn van Vliet <[email protected]> 
# 
# Version: 1.0 (29-09-2017) 
# - Initial version of the script. 

# Check for optional command line argument 
if [ "$#" = 0 ] 
then 
    ENV_OUTPUT=`conda env export` 
elif [ "$#" = 1 ] 
then 
    ENV_OUTPUT=`cat $1` 
else 
    echo "Usage: $0 [environment file]" >&2 
    exit 1 
fi 

PIP=0 # Whether we are parsing PIP packages 
IFS=$'\n' # Split on newlines 
PIP_PACKAGES="" # PIP packages found thus far 

# Loop over the output of "conda env export" 
for line in $ENV_OUTPUT 
do 
    # Don't do anything until we get to the packages installed by PIP 
    if [ "$line" = "- pip:" ] 
    then 
     PIP=1 # From this point, start doing things. 
    elif [[ "$line" = prefix:* ]] 
    then 
     PIP=0 # End of PIP package list. Stop doing things. 
    elif [ $PIP = 1 ] 
    then 
     # Packages are listed as " - name==version==python_version" 
     # This is a regular expression that matches only the name and 
     # strips quotes in git URLs: 
     REGEXP='^ - "\?\([^="]*\)"\?.*$' 

     # Find PIP package name (or git URL) 
     PIP_PACKAGES="$PIP_PACKAGES `echo "$line" | sed -n "s/$REGEXP/\1/p"`" 
    fi 
done 

# From now on, split on spaces 
IFS=' ' 

echo "The following packages are marked for upgrade using PIP:" 
echo 
for package in $PIP_PACKAGES 
do 
    echo " - $package" 
done 
echo 

read -r -p "Shall we proceed with the upgrade? [y/N] " response 
case "$response" in 
    [yY][eE][sS]|[yY]) 
     # Upgrade each package 
     for package in $PIP_PACKAGES 
     do 
      pip install --upgrade $package 
     done 
     ;; 
    *) 
     echo "Aborting" 
     ;; 
esac