2015-10-17 2 views
5

В моей системе Windows 7 я пытаюсь установить столько пакетов, используя conda. Это легко обновить сОбновить все пакеты пакетов, которые не поступают из conda

conda update all 

К сожалению, некоторые пакеты не появляются в Конда, но доступны через пип и поэтому для тех, кто я установить их с помощью пипс. Обновление всех пакетов пакетов в окнах кажется более сложным, но

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

- это один из способов найти.

Однако, это попытка обновить все пакеты, даже те, которые установлены conda, я считаю.

Есть ли способ обновить только те пакеты, которые установлены в pip?

ответ

1

Это сложно, поскольку пакеты Pipe отличаются от пакетов conda. Anaconda добавляет pip в качестве варианта установки и помещает их в среду, но не управляет ими. Пип все еще без легкой команды, чтобы обновить все, но некоторые предложения, как вы пытались и это еще одна:

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

Благодарим за это, но ваш ответ не будет работать на Windows, а также не препятствует тому, чтобы pip обновлял пакеты, которые управляет conda? – eleanora

3

Вот моя попытка скрипт, который будет анализировать вывод conda env export и обновить все 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 
Смежные вопросы