Как мне обновить пакет Python?


234

Я использую Ubuntu 9:10 и установлен пакет под названием M2Crypto (версия 0.19.1). Мне нужно скачать, собрать и установить последнюю версию пакета M2Crypto (0.20.2).

Пакет 0.19.1 содержит файлы в нескольких местах, включая (/ usr / share / pyshared и /usr/lib/pymodules.python2.6).

Как полностью удалить версию 0.19.1 из моей системы перед установкой 0.20.2?

Ответы:


54

Возможно, вы захотите заглянуть в менеджер пакетов Python вроде pip . Если вы не хотите использовать менеджер пакетов Python, вы можете загрузить M2Crypto и выполнить сборку / компиляцию / установку поверх старой установки.


1
Спасибо. То, что вы сказали, сработало. Я собрал и установил 0.20.2 без необходимости удаления 0.19.1.
Томпсон

461

Лучший способ, который я нашел, - запустить эту команду из терминала.

sudo pip install [package_name] --upgrade

sudo попросит ввести пароль root для подтверждения действия.


Примечание. У некоторых пользователей может быть установлен pip3. В этом случае используйте

sudo pip3 install [package_name] --upgrade

4
И если вы используете прокси без аутентификации: sudo pip install [package] --upgrade --proxy = адрес: порт
lmsasu

32
Я пришел сюда за этот ответ. Я пытался pip updateи pip upgradeбыл в отчаянии, пока я не увидел --upgradeздесь. Почему они не добавляют pip upgradeкоманду?
Ларс Блумберг

9
Это действительно хорошо скрытая особенность.
otocan

1
Для пользователей Windows: sudoне требуется.
Stevoisiak

2
Это должен быть ответ № 1
Шнур Kaldemeyer

48

Чтобы автоматически обновить все устаревшие пакеты (которые были установлены с помощью pip), просто запустите приведенный ниже скрипт:

pip install $(pip list --outdated | awk '{ print $1 }') --upgrade

Здесь pip list --outdatedбудут перечислены все устаревшие пакеты, а затем мы передадим его в awk, чтобы он печатал только имена. Затем $(...)он будет переменным, а затем все будет выполнено автоматически. Убедитесь, что у вас есть разрешения. (Просто поставьте sudoперед pip, если вы запутались) Я написал бы скрипт с именем, pip-upgrade Код ниже,

#!/bin/bash
sudo pip install $(pip list --outdated | awk '{ print $1 }') --upgrade

Затем используйте следующие строки сценария, чтобы подготовить его:

sudo chmod +x pip-upgrade
sudo cp pip-upgrade /usr/bin/

Тогда просто pip-upgradeударь и вуаля!


я получил синтаксическую ошибку, указывающую на последнюю скобку в:awk: cmd. line:1: { print $1 })
TT--

7
@TT Более новые версии pipтребуют использования --format=legacyопции, т pip list --outdated --format=legacy. Е. Также, к вашему сведению: вслепую обновлять все модули через pip может быть довольно опасно во многих дистрибутивах Linux. Многие из них предоставляют определенные модули Python через пакеты дистрибутивов, и некоторые из этих дистрибутивов (в частности, RHEL) могут сломаться, если вы обновляете дерьмо ... не говоря уже о том, что если вы обновляете через pip, пакеты дистрибутивов могут отменить ваши изменения будущее обновление.
rsaw

спасибо @rsaw. Он прав, вы должны запускать команды пипа с опцией --user
Фахим Фердоус

1
Мне нравится этот ответ, хотя я понимаю опасность автоматического обновления всего. В любом случае, поскольку устаревшая версия устарела в pip 19.0 pip install $ (список пунктов - outdated --format = columns | grep -v "Package" | grep -v - ---- | awk '{print $ 1}') - -обновление
Майк v

2
Для того , чтобы работать над Ubuntu 18.04 venv адаптироваться следующим образом :pip install $(pip list --outdated | tail +3 | grep -v sdist | awk '{ print $1 }') --upgrade
Александр Remesch

34
  1. В командной строке Windows запустите: pip list --outdated Вы получите список устаревших пакетов.
  2. Выполнить: pip install [package] --upgrade обновление [package]и удаление предыдущей версии.

Чтобы обновить пипс:

py -m pip install --upgrade pip

Опять же, это удалит предыдущую версию pip и установит последнюю версию pip.


29
  • Способ 1. Обновление вручную по одному

pip install package_name -U
  • Способ 2. Обновите все сразу (высокая вероятность отката, если не удалось обновить какой-либо пакет

pip install $(pip list --outdated --format=columns |tail -n +3|cut -d" " -f1) --upgrade
  • Метод 3: Обновите один за другим, используя цикл

for i in  $(pip list --outdated --format=columns |tail -n +3|cut -d" " -f1); do pip install $i --upgrade; done


9

Используйте pipupgrade !

$ pip install pipupgrade
$ pipupgrade --latest --interactive

pipupgrade поможет вам обновить вашу систему, локальные или пакеты из requirements.txtфайла! Он также выборочно обновляет пакеты, которые не нарушают изменения. Совместим с Python2.7 +, Python3.4 + и pip9 +, pip10 +, pip18 +.

введите описание изображения здесь

ПРИМЕЧАНИЕ: я автор инструмента.


1
Всякий раз, когда я использую этот инструмент, я получаю ответ "[0; 93mChecking ... [0m"), и он продолжает ничего не делать. Я использую это неправильно?
Violatic

Я использую Mac с MacPorts. В Python 3.7 pipupgrade работал только для 5 из 50 пакетов, в остальном мне пришлось использовать это: для i in pip3.7 list --outdated | sed -n -e '3,$s/ .*//p'; сделать pip3.7 установить --upgrade $ i; сделано
Майкл Дрехер

4

Как изначально был установлен пакет? Если бы это было через apt, вы могли бы просто сделатьapt-get remove python-m2crypto

Если вы установили его с помощью easy_install, я почти уверен, что единственный способ - просто удалить файлы в lib, shared и т. Д.

Моя рекомендация в будущем? Используйте что-то вроде pip для установки ваших пакетов. Кроме того, вы можете найти что-то под названием virtualenv, чтобы ваши пакеты хранились отдельно для каждой среды, а не только для root.

С pip это довольно просто:

pip install m2crypto

Но вы также можете установить из репозитория git, svn и т. Д. С правильным адресом. Это все объясняется в документации пипа


То, как он описывает, где установлены файлы, указывает, что пакет был установлен с помощью менеджера пакетов apt - потому что (в Debian AFAIK) apt установит пакеты python в двух местах, которые он перечислит - / share / pyshared / .. для общего кода между версиями и / usr / lib / .. для отдельных частей версии. easy-install / pip, с другой стороны, использовал бы / usr / local / lib / .. - так как вы сказали - просто apt-get remove сделало бы его.
Базель Шишани


3

В блокноте Juptyer очень простой способ

!pip install <package_name> --upgrade

Итак, вам просто нужно заменить на фактическое имя пакета.


2

Получить все устаревшие пакеты и создать пакетный файл с помощью следующих команд pip install xxx --upgrade для каждого устаревшего пакета

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.