Управление пакетами Python с помощью pip

Раздел: Администрирование -> Команды и администрирование Python

Основные команды pip и их применение

Наиболее эффективный подход к управлению зависимостями в проекте - использование файла requirements.txt в сочетании с командами pip freeze и pip install -r. Это позволяет полностью воспроизводить окружение на любой машине.

pip freeze > requirements.txt
pip install -r requirements.txt

Python call command (вызов команд из python)

Команда pip freeze выводит список установленных пакетов с точными версиями. Перенаправление вывода в файл сохраняет этот список. Далее pip install -r устанавливает все перечисленные пакеты. Типичная ошибка - попытка выполнить pip freeze вне виртуального окружения, что приводит к выводу глобальных пакетов. Решение: всегда активировать виртуальное окружение перед выполнением.

Проблема: после pip install -r requirements.txt возникает ошибка конфликта версий. Решение: использовать pip install --no-deps или проверить совместимость с помощью pip check.

Как установить конкретный пакет с указанием версии?

Используется команда pip install package==version. Например:

pip install requests==2.28.1

Python pip commands (команды pip)

Если версия не указана, pip устанавливает последнюю совместимую. Для установки версии из диапазона применяются операторы >=, <=, ~=.

Проблема: ошибка No matching distribution found. Решение: проверить название пакета и версию, возможно пакет удалён или версия не существует. Использовать pip index versions package для просмотра доступных версий.

Как обновить все установленные пакеты?

Прямой команды для обновления всех пакетов в pip нет. Используется комбинация:

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U

Другой вариант - использовать pipupgrade (сторонний инструмент) или написать скрипт на Python. В Windows команда изменяется: for /F %i in ('pip list --outdated --format=columns ^| find /v "Package" ^| find /v "---" ^| find /v "^|" ^| find /v " "') do pip install --upgrade %i.

Проблема: при обновлении одного пакета могут обновиться зависимости, которые сломают проект. Решение: перед массовым обновлением создать и проверить requirements.txt, затем обновлять точечно.

Как удалить пакет и его зависимости?

Команда pip uninstall package удаляет только указанный пакет. Зависимости остаются. Для автоудаления неиспользуемых зависимостей можно использовать pip-autoremove или ручную проверку с pip show package (поле Requires). Пример:

pip show numpy
# Requires: python-dateutil, pyparsing

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

Как установить пакет из Git-репозитория?

Используется pip install git+https://.... Пример:

pip install git+https://github.com/psf/requests.git

Можно указать ветку, тег или коммит: @branch. Для установки из локальной папки: pip install /path/to/package или pip install -e . для editable mode (разработки).

Проблема: отсутствие Git или прав доступа. Решение: установить Git, использовать SSH-ключи или токены.

Как работать с прокси и альтернативными индексами?

Для корпоративных сетей:

pip install --proxy http://user:pass@proxy:port package

Для смены индекса (например, зеркало PyPI):

pip install --index-url https://mirror.yandex.ru/pypi/simple/ package

Постоянная настройка делается через ~/.pip/pip.conf (Linux) или %APPDATA%/pip/pip.ini (Windows).

Проблема: сертификаты SSL. Решение: добавить --trusted-host hostname или использовать --cert с пользовательским сертификатом.

Расширенные примеры использования pip

Пример 1. Установка пакетов из requirements.txt без кэша и с дополнительными опциями.

Пример
pip install --no-cache-dir -r requirements.txt --user --no-deps
Collecting numpy==1.21.0
  Downloading numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.7 MB)
Installing collected packages: numpy
Successfully installed numpy-1.21.0

Пояснение: --no-cache-dir отключает кэш (полезно при ограниченном дисковом пространстве), --user устанавливает в каталог пользователя (без прав root), --no-deps игнорирует зависимости (используется для точного контроля).

Пример 2. Создание requirements.txt с хэшами для проверки целостности (формат hashes).

Пример
pip freeze --all | pip hash -r /dev/stdin > requirements_with_hashes.txt
# Содержимое requirements_with_hashes.txt
numpy==1.21.0 --hash=sha256:...
requests==2.28.1 --hash=sha256:...

Этот формат используется в сложных сценариях воспроизведения окружения. Команда pip freeze --all включает все пакеты (даже от pip/setuptools).

Пример 3. Установка пакета в режиме редактирования (editable) из локальной директории.

Пример
cd ~/my_project
pip install -e .
Obtaining file:///home/user/my_project
  Preparing metadata (setup.py) ... done
Installing collected packages: my-project
  Running setup.py develop for my-project
Successfully installed my-project

Пакет не копируется в site-packages, а ссылается на исходный код. Изменения в коде сразу видны интерпретатору.

Пример 4. Скачивание (без установки) пакетов с помощью pip download.

Пример
pip download --dest ./wheels -r requirements.txt --platform manylinux2014_x86_64 --python-version 3.9 --only-binary=:all:
Collecting numpy==1.21.0
  Downloading numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.7 MB)
  Saved ./wheels/numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.whl
  ...

Позволяет получить бинарные колёса для конкретной платформы и версии Python, без установки. Удобно для подготовки к офлайн-установке.

Пример 5. Использование pip check для поиска нарушенных зависимостей.

Пример
pip check
All dependencies are installed and compatible.

Или:
SomePackage 1.0 has requirement requests>=2.20, but you have requests 2.19.

Команда анализирует метаданные установленных пакетов и сообщает о несоответствиях версий.

Пример 6. Установка пакета из приватного репозитория с аутентификацией через токен.

Пример
pip install --extra-index-url https://__token__:<TOKEN>@gitlab.com/api/v4/groups/123/-/packages/pypi/simple my-private-package
Looking in indexes: https://pypi.org/simple, https://__token__:****@gitlab.com/...

Токен передаётся в URL; в логах он маскируется. Для постоянной настройки токен лучше хранить в переменной окружения и использовать --index-url.

Пример 7. Отображение подробной информации о пакете: pip show.

Пример
pip show requests -f
Name: requests
Version: 2.28.1
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
License: Apache 2.0
Location: /usr/lib/python3.9/site-packages
Requires: certifi, charset-normalizer, idna, urllib3
Required-by: SomePackage
Files:
  requests/__init__.py
  requests/api.py
  ...

Ключ -f показывает список файлов пакета. Полезно для проверки, какие зависимости использует пакет и какие пакеты от него зависят.

Пример 8. Установка пакета из локального Wheel-файла.

Пример
pip install ./downloads/numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.whl
Processing ./downloads/numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.whl
Installing collected packages: numpy
Successfully installed numpy-1.21.0

Если файл в формате .tar.gz (исходный код), pip попытается собрать его, что требует компилятора. Предпочтительно использовать колеса.

Пример 9. Вывод списка установленных пакетов с устаревшими версиями (outdated).

Пример
pip list --outdated --format=columns
Package   Version Latest Type
numpy     1.21.0  1.26.2 wheel
requests  2.28.1  2.31.0 wheel

Поле Type указывает, из какого источника была установка (wheel или sdist).

Пример 10. Установка зависимостей проекта с дополнительным индексом (extra-index) и доверенным хостом.

Пример
pip install -r requirements.txt --extra-index-url https://private-repo.example.com --trusted-host private-repo.example.com
Looking in indexes: https://pypi.org/simple, https://private-repo.example.com
Collecting packageA
  Downloading packageA-1.0-py3-none-any.whl (1.2 MB)
Successfully installed packageA

--trusted-host требуется, если репозиторий не использует HTTPS с официальным сертификатом.

Команды pip - comments

En
Python pip commands (python)