Як оновити пакет 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.
— thompson

461

Найкращий спосіб, який я знайшов, - це запустити цю команду з терміналу

sudo pip install [package_name] --upgrade

sudo попросить ввести ваш кореневий пароль для підтвердження дії.


Примітка. Деякі користувачі можуть замість цього встановити pip3. У такому випадку використовуйте

sudo pip3 install [package_name] --upgrade

4
І якщо ви використовуєте проксі без автентифікації: sudo pip install [package] --upgrade --proxy = address: port
— lmsasu

32
Я прийшов сюди за цією відповіддю. Я намагався pip updateі pip upgradeбув у відчаї, поки не побачив --upgradeтут. Чому вони не додають pip upgradeкоманду?
— Ларс Блюмберг

9
Це дійсно добре прихована особливість.
— otocan

1
Для користувачів Windows: sudoне потрібно.
— Stevoisiak

2
Це має бути відповідь №1
— Корд Калдемайер

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. Також FYI всі: сліпе оновлення всіх модулів через pip може бути досить небезпечним для багатьох Linux-дистрибутивів. Багато з них надають конкретні модулі python через пакунки distro, а деякі з цих дистрибутивів (зокрема RHEL) можуть зламатись, якщо ви оновлюєте лайно ... не кажучи вже про те, що якщо ви оновлюєтесь через pip, дистрибутивні пакети можуть відновити зміни майбутнє оновлення.
— rsaw

дякую @rsaw Він має рацію, вам слід запускати свої команди з допомогою опції --user
— Fahim Ferdous

1
Мені подобається ця відповідь, хоча я розумію небезпеку автоматичного оновлення всього. У будь-якому випадку, оскільки застаріла застара в піп-версії 19.0 pip встановити $ (список запитів - актуалізований --format = стовпці | grep -v "Пакет" | grep -v - ---- | awk '{print $ 1}') - -поновлення
— mike v

2
Для роботи над Ubuntu 18.04 venv адаптуйте так:pip install $(pip list --outdated | tail +3 | grep -v sdist | awk '{ print $1 }') --upgrade
— Олександр Ремеш

34
  1. Через командний рядок windows запустіть: pip list --outdated Ви отримаєте список застарілих пакетів.
  2. Запустити: pip install [package] --upgrade оновить [package]попередню версію та видалить її.

Щоб оновити pip:

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", і він не робить нічого. Чи неправильно я його використовую?
— Фіолетовий

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

4

Як був встановлений пакет спочатку? Якби це було через apt, ви могли просто зробитиapt-get remove python-m2crypto

Якщо ви встановили це через easy_install, я впевнений, що єдиний спосіб - це просто виправити файли під lib, наданими спільними можливостями тощо.

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

З Pip це досить просто:

pip install m2crypto

Але ви також можете встановити з git, svn тощо репозиції з правильною адресою. Це все пояснено в документації на піп


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


3

У зошиті Юптьє є дуже простий спосіб

!pip install <package_name> --upgrade

Отже, потрібно просто замінити фактичну назву пакета.


2

Отримайте всі застарілі пакети та створіть пакетний файл із наступними командами pip install xxx - Upgrade для кожного застарілого пакету

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.