2014-09-12 2 views
1

Я использую кучу пакетов python для своих исследований, которые я устанавливаю в своем домашнем каталоге, используя опцию --user. Есть также некоторые пакеты, которые были установлены менеджером пакетов моего дистрибутива для других вещей. Я хотел бы иметь команду pip, которая только обновляет пакеты, которые я установил самостоятельно с опцией --user.обновление установленных пользователем пакетов с помощью pip

Я пробовал рекомендовать версию pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U, но это, похоже, работает только с использованием virtualenvs. pip freeze --local показывает пакеты, которые установлены для моего пользователя и в системе.

Есть ли способ обновить только пакеты, установленные локально для моего пользователя?

ответ

3

Я тоже столкнулся с этой проблемой и создал следующий сценарий. Скрипт обновляет все найденные пиком пакеты и которые находятся в домашнем каталоге пользователя. Обычно это должны быть пакеты, которые были установлены с pip install --user.

#!/usr/bin/env python 

# Starting point for this script: 
# http://stackoverflow.com/a/5839291 

import os 
import pip 
import subprocess 

homedir = os.getenv('HOME') 
homepkg = [] 

for dist in pip.get_installed_distributions(): 
    if not dist.location.startswith(homedir): 
    continue 
    homepkg.append(dist.project_name) 

if len(homepkg) == 0: 
    print('No locally-installed packages, nothing to update.') 
    raise SystemExit 

# --no-deps is required because --upgrade by default is recursive and would try 
# to update packages that are not from homedir (e.g. from /usr). 

subprocess.call(['pip', 'install', '--user', '--upgrade', '--no-deps'] + homepkg) 
0

Я бы предложил создать виртуальную среду, если это возможно для вас.

Вы должны использовать sudo apt-get install python-virtualenv для установки virtualenv, а затем введите свою папку, в которой хранятся проекты python, и введите в терминал virtualenv venv. После этого вы можете активировать его следующим образом: source venv/bin/activate.

Что он делает, так это создание почти полной копии python (некоторые библиотеки просто связаны с сохранением места), и все, что вы делаете после активации, влияет только на эту копию, а не на глобальную среду. Поэтому вы можете установить любой набор библиотек, используя pip, обновить их и т. Д., И вы ничего не измените вне виртуальной среды. Но не забудьте активировать его сначала, прежде чем что-либо сделать.

+0

virtualenv для меня действительно не работает, потому что я хочу изменить глобальную среду для своего пользователя. –

+0

Хорошо, это было скорее альтернативное предложение, которое в большинстве случаев должно быть проще в работе и прекрасно работать, но если вам действительно нужно обновить глобальную среду, я не знаю о решении. – Raven

Смежные вопросы