2015-10-17 14 views
5

W moim systemie Windows 7 próbuję zainstalować tyle pakietów za pomocą Conda. Są łatwe do aktualizacji zZaktualizuj wszystkie pakiety pip, które nie pochodzą od Conda.

conda update all 

Niestety niektóre pakiety nie pojawiają się w Conda ale są dostępne za pośrednictwem pip i tak dla tych, zainstalować je za pomocą pip. Aktualizowanie wszystkich pakietów pakietów w systemie Windows wydaje się być trudniejsze, ale można je znaleźć w jeden sposób, ale można je znaleźć w jednym z nich.

Próbuje jednak zaktualizować wszystkie pakiety, nawet te zainstalowane przez conda, które moim zdaniem.

Czy istnieje sposób na aktualizację tylko tych pakietów zainstalowanych przez pip?

Odpowiedz

1

Jest to trudne, ponieważ pakiety Pip są inne niż pakiety conda. Anaconda dodaje pip jako opcję instalacji i umieszcza je w środowisku, ale nie zarządza nimi. Pip jest nadal bez łatwego polecenia uaktualnić wszystkie, ale niektóre sugestie są jak próbowałeś i to jest inny:

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

Dzięki za to, ale odpowiedź nie będzie działać w systemie Windows, a także nie stoi na przeszkodzie PIP z aktualizacją pakietów Conda zarządza prawda? – eleanora

3

Oto moja próba skrypt powłoki, które będą analizować dane wyjściowe conda env export i uaktualnić pakiety 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 
Powiązane problemy