Как обновить все пакеты сразу с помощью pip?
Какой командой мне воспользоваться, чтобы с помощью pip обновить все пакеты сразу? Есть ли такая команда вообще? Если есть, зависит ли она от используемой ОС? P.S. Не надо молча давать мне ссылки на какие-то другие сайты. Я и сам умею пользоваться гуглом. Мне нужен четкий ответ на поставленный вопрос.
Отслеживать
задан 8 окт в 9:47
2,027 2 2 золотых знака 6 6 серебряных знаков 28 28 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Команда pip freeze выводит все установленные библиотеки в формате
lib1==0.1.0 lib2==3.2.1 .
А команде pip install можно передавать файл как раз в таком формате, соответственно:
pip freeze > requirements.txt pip install -r requirements.txt -U
(эти команды работает на любой системе)
Вот так можно сделать на Linux:
pip freeze > requirements.txt && pip install -r requirements.txt -U
Почему вам действительно нужно обновить pip
Новые выпуски программного обеспечения могут содержать исправления ошибок, новые функции и более высокую производительность. Например, в NumPy 1.20 добавлены аннотации типов и улучшена производительность за счет использования SIMD, когда это возможно. Если вы устанавливаете NumPy, возможно, вы захотите установить самую новую версию.
К сожалению, если вы используете старую версию pip , установка последней версии пакета Python может завершиться ошибкой или установиться более медленным и более сложным способом.
Почему? Комбинация управления версиями glibc , графика окончания срока службы CentOS и способов установки pip пакетов.
Давайте посмотрим, в чем именно заключается проблема, как ее решить и, наконец, если вам достаточно интересно, что ее вызывает.
Проблема со старым pip
Начнем с образа Docker Ubuntu 18.04. Эта версия Ubuntu, выпущенная в апреле 2018 года, включает Python версии 3.6 и pip версии 9.
[itamarst@blake dev]$ docker run -it ubuntu:18.04 root@1a43d55f0524:/# apt-get update . root@1a43d55f0524:/# apt-get install --no-install-recommends python3 python3-pip . root@1a43d55f0524:/# pip3 --version pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
Все идет нормально.
Ошибка №1: компиляция из исходников
Затем давайте установим пакет cryptography , который является одним из самых загружаемых пакетов Python на PyPI, с миллионами загрузок в месяц (обычно как косвенная зависимость).
root@1a43d55f0524:/# pip3 install cryptography Collecting cryptography Downloading https://files.pythonhosted.org/packages/fa/2d/2154d8cb773064570f48ec0b60258a4522490fcb115a6c7c9423482ca993/cryptography-3.4.6.tar.gz (546kB) 100% |################################| 552kB 1.4MB/s Complete output from command python setup.py egg_info: Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'setuptools' ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-6jesygn0/cryptography/
Эта ошибка означает, что pip , хочет скомпилировали пакеты; это сработает, если мы установим компилятор setuptools и цепочку инструментов разработки Python, но это будет довольно медленно.
Конечно, это не один пакет. Та же проблема возникает например с PyArrow:
root@1a43d55f0524:/# pip3 install pyarrow Collecting pyarrow Downloading https://files.pythonhosted.org/packages/62/d3/a482d8a4039bf931ed6388308f0cc0541d0cab46f0bbff7c897a74f1c576/pyarrow-3.0.0.tar.gz (682kB) 100% |################################| 686kB 1.1MB/s Complete output from command python setup.py egg_info: Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'setuptools' ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-heq6zwd7/pyarrow/
Почему pip пытается скомпилировать эти пакеты с нуля? Почему мы не получаем предварительно скомпилированный двоичный пакет?
Мы увидим ответ чуть позже, после того как рассмотрим вторую ошибку.
Ошибка №2: старые версии
Затем давайте установим Fil, мой профилировщик памяти для Python.
root@1a43d55f0524:/# pip3 install filprofiler Collecting filprofiler Downloading https://files.pythonhosted.org/packages/e3/a2/843e7b5f1aba27effb0146c7e564e2592bfc9344a8c8ef0d55245bd47508/filprofiler-0.7.2-cp36-cp36m-manylinux1_x86_64.whl (565kB) 100% |################################| 573kB 1.8MB/s Installing collected packages: filprofiler Successfully installed filprofiler-0.7.2
Это сработало! За исключением того, что вы посетите страницу PyPI для Fil, вы увидите, что версия 0.7.2 довольно устарела. На момент написания этой статьи последняя версия Fil — 0.14.1.
Почему была установлена старая версия?
pip и manylinux
Многие пакеты — от NumPy до Cryptography — требуют компиляции некоторого кода на C/C++/Cython/Rust/и т. д. Чтобы избавить вас от необходимости компилировать все с нуля, специалисты по сопровождению могут загрузить скомпилированную версию кода — «wheels» — в указатель пакетов Python. Если pip видит wheels, которое будет работать с вашей конкретной версией Python и версией операционной системы, он загрузит его вместо исходного кода.
Для Linux, существует несколько вариантов wheels: manylinux1 , manylinux2010 , и manylinux2014 . Вы можете увидеть, какой вариант используется в имени файла загружаемого wheels.
Проблема в том, что старые версии pip не поддерживаются manylinux2010 , и уж точно не manylinux2014 . В Ubuntu 18.04 pip слишком стар, поэтому он знает только о manylinux1 . Это объясняет две проблемы, которые мы видели:
- Если проверить имеющиеся файлы списков для PyArrow 3.0.0 на PyPI, вы увидите , что wheels есть только manylinux2010 и manylinux2014 . Поэтому pip решил вернуться к пакету исходного кода, который требует компиляции.
- Если вы проверите файлы PyPI для Fil, вы увидите, что есть manylinux2010 , а исходных пакетов нет вообще; поскольку сборка из исходных текстов немного сложна, я распространяю только скомпилированные пакеты. Это означает, что pip продолжает возвращаться к более старым версиям пакета, пока не найдет ту, в которой есть manylinux1 .
Решение: обновление pip
Чтобы получить самые последние и лучшие пакеты без компиляции, вам необходимо обновить до последней версии pip . Как вы это делаете, зависит от вашего окружения.
В общем, можно выполнить pip install —upgrade pip .
Однако в некоторых средах могут возникать проблемы. Например, если вы посмотрите выше, как мы настраиваем Python в Ubuntu 18.04, мы установили pip из системного пакета.
Проблема в том, что перезапись случайных файлов из системного пакета — плохая идея. Если вы не работаете в среде, которую вы можете при необходимости перестроить с нуля — например, образ Docker — вам никогда не следует запускать pip install с правами root или с помощью sudo для изменения системных пакетов.
Поэтому вместо этого в Ubuntu 18.04 вы можете получить pip через загрузку:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py
Или вы можете создать virtualenv, а затем обновить его pip , выполнив pip install —upgrade pip :
root@1a43d55f0524:/# python3 -m venv myvenv root@1a43d55f0524:/# . myvenv/bin/activate (myvenv) root@1a43d55f0524:/# pip --version pip 9.0.1 from /myvenv/lib/python3.6/site-packages (python 3.6) (myvenv) root@1a43d55f0524:/# pip install --upgrade pip Collecting pip Using cached https://files.pythonhosted.org/packages/fe/ef/60d7ba03b5c442309ef42e7d69959f73aacccd0d86008362a681c4698e83/pip-21.0.1-py3-none-any.whl Installing collected packages: pip Found existing installation: pip 9.0.1 Uninstalling pip-9.0.1: Successfully uninstalled pip-9.0.1 Successfully installed pip-21.0.1
Теперь, когда у нас есть более новая версия pip , мы можем легко установить последние версии cryptography и filprofiler :
(myvenv) root@1a43d55f0524:/# pip install cryptography filprofiler Collecting cryptography Downloading cryptography-3.4.6-cp36-abi3-manylinux2014_x86_64.whl (3.2 MB) |################################| 3.2 MB 4.5 MB/s . Installing collected packages: pycparser, threadpoolctl, cffi, filprofiler, cryptography Successfully installed cffi-1.14.5 cryptography-3.4.6 filprofiler-0.14.1 pycparser-2.20 threadpoolctl-2.1.0
Обратите внимание, что мы загрузили пакет manylinux2014 для cryptography .
Почему существует так много вариаций manylinux?
Скомпилированные расширения Python в Linux связываются со стандартной библиотекой C, а в wheels, в частности, они связываются с GNU Libc, также известной как glibc. Вы можете увидеть, с какими библиотеками связана исполняемая или разделяемая библиотека, с помощью утилиты ldd :
root@1a43d55f0524:/# cd myenv/lib/python3.6/site-packages root@1a43d55f0524:/# ldd cryptography/hazmat/bindings/_openssl.abi3.so linux-vdso.so.1 (0x00007ffdbea7b000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fba7b1bf000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fba7adce000) /lib64/ld-linux-x86-64.so.2 (0x00007fba7b7b0000)
Обратите внимание, что скомпилированное расширение Python полагается, среди прочего, на glibc /lib/x86_64-linux-gnu/libc.so.6 .
Если вы компилируете свой код с более новой версией glibc, ему могут потребоваться новые API или символы, которые недоступны в старых версиях. А это означает, что ваш код не будет работать с более старыми версиями glibc, то есть со старыми дистрибутивами Linux.
Есть несколько различных решений этой проблемы. Conda решает эту проблему, скомпилировав все свои пакеты по старой версии заголовков glibc, которые она включает; в основном он имеет настраиваемую настройку компиляции, предназначенную для работы с широким спектром выпусков Linux.
Бинарные wheels PyPI решают эту проблему путем компиляции в старых версиях Linux, которые, соответственно, имеют старые версии glibc. Поскольку он скомпилирован для старой версии, он будет работать и с любой более новой версией.
- Пакеты manylinux1 построены на CentOS 5.
- Пакеты manylinux2010 построены на CentOS 6.
- Пакеты manylinux2014 построены на CentOS 7.
Мотивация для каждого нового варианта — это окончание срока службы каждой версии CentOS. И каждый новый вариант требует соответствующей новой версии pip . Вы можете узнать больше в PEP-571 и PEP-599.
Обновите свой pip!
Независимо от того, настраиваете ли вы среду разработки или пишете свой Dockerfile , обязательно обновите pip . В противном случае вам будет намного сложнее устанавливать пакеты.
Как обновить PIP в Windows
Зачастую возникает необходимость обновления PIP. В данном руководстве будет дана поэтапная инструкция для обновления PIP в Windows.
Столкнуться с необходимостью обновления PIP можно при установке любого пакета, используя PIP.
Выводится следующее сообщение:

Вы используете версию pip 19.3.1; однако, доступна версия 20.1.1. Вам стоит сделать обновление через команду ‘python -m pip install –upgrade pip’.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Для обновления PIP в Windows нужно открыть Windows Command Prompt, а затем набрать/скопировать туда указанную команду. Обратите внимание, что данный метод сработает только если у вас уже добавлен Python в Windows PATH. Ничего страшного, если вы не знаете, что это такое. Далее мы подробно разберем все шаги обновления PIP.
python — m pip install — upgrade pip
План обновления PIP в Windows
В поисковике Windows наберите Command Prompt (Командная строка):
![]()
Затем откройте Command Prompt (Командную строку). Во избежание проблем с уровнем доступа сделайте это от имени администратора. Для этого кликлинте правой кнопкой мыши и выберите пункт Run as administrator (Запустить от имени администратора):

В командной строке наберите cd \ , чтобы удостовериться, что в начальной точке только название диска:

Нажмите Enter. Вы увидите название диска C:\>

Найдите путь к Python, что является папкой, куда установлен Python.
В нашем случае путь приложения Python следующий:

После получения пути к Python наберите следующую команду в командной строке: cd , за которым следует путь к приложению Python.
В нашем случае это выглядит следующим образом:

Нажмите Enter, вы увидите:

Обновите PIP, использовав данную команду, затем нажмите Enter:
Как обновить pip?

Статья с подробным руководством по обновлению пакетного менеджера pip.
Введение
PyPI (аббр. от англ. Python Package Index — «каталог пакетов Python») — каталог программного обеспечения, написанного на языке программирования Python. В сочетании с системами управления библиотечными пакетами (pip, easy_install) аналогичен PEAR для PHP и CPAN для Perl. По состоянию на февраль 2020 года содержит более 216 000 пакетов, тогда как в 2010 году пакетов было всего около 10000.
Установка
Предлагаю опустить момент установки pip и считать что он у вас уже установлен. Еще хотелось бы обратить внимание, что в разных операционных системах pip запускается по разному — pip или pip3. При использование виртуальных окружений создаются символические ссылки на оба варианта.
Текущая версия
Для этого достаточно выполнить команду pip show pip

На момент написания статьи я использую версию pip 20.1.1, давайте проверим, есть ли в репозитории версия свежее.
Выполняем команду — pip search pip | grep «INSTALLED:»

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

Как видим у нас используется версия 19.3.1, давайте попробуем его обновить. Чтобы выполнить обновление достаточно ввести команду в терминал
pip install —upgrade pip или более короткий вариант pip install -U pip

Заключение
На этом обновление pip в Python подошло к концу, если у вас возникли дополнительные вопросы — не стесняйтесь задавать их в комментариях.