Управление пакетами Python с помощью pip
Основные команды pip и их применение
Наиболее эффективный подход к управлению зависимостями в проекте - использование файла requirements.txt в сочетании с командами pip freeze и pip install -r. Это позволяет полностью воспроизводить окружение на любой машине.
pip freeze > requirements.txt
pip install -r requirements.txtPython 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.1Python 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 с официальным сертификатом.