Устанавливаем python-пакеты с помощью pip
pip — это система управления пакетами, которая используется для установки и управления программными пакетами, написанными на Python.
Установка pip
Прежде чем с помощью pip устанавливать python-пакеты, нужно сначала установить сам pip.
Python 3.4+
Начиная с Python версии 3.4, pip поставляется вместе с интерпретатором python.
Python
- Загрузить get-pip.py (обязательно сохранив с расширением .py).
- Запустить этот файл (могут потребоваться права администратора).
Есть ещё один способ (для Windows). Возможно, он является более предпочтительным:
- Установить setuptools http://www.lfd.uci.edu/~gohlke/pythonlibs/#setuptools
- Установить pip http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip
Начало работы
Попробуем с помощью pip установить какой-нибудь пакет, например, numpy:
sudo pip3 install numpy
pip3 install numpy
Может не сработать, написав: «python» не является внутренней или внешней командой, исполняемой программой или пакетным файлом (такого, скорее всего, не должно быть при установке pip вторым способом, но проверить не на чем).
Тогда нужно обращаться напрямую:
Либо добавлять папку C:\Python34\Tools\Scripts\ в PATH вручную (самому проверить не на чем, можете посмотреть на stackoverflow. У кого получится — напишите в комментарии).
Что ещё умеет делать pip
Пробежимся по основным командам pip:
pip help — помощь по доступным командам.
pip install package_name — установка пакета(ов).
pip uninstall package_name — удаление пакета(ов).
pip list — список установленных пакетов.
pip show package_name — показывает информацию об установленном пакете.
pip search — поиск пакетов по имени.
pip —proxy user:passwd@proxy.server:port — использование с прокси.
pip install -U — обновление пакета(ов).
pip install —force-reinstall — при обновлении, переустановить пакет, даже если он последней версии.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Tech blog by @dizballanze
Python wheels для быстрой установки зависимостей
Часто все зависимые python пакеты устанавливаются при помощи pip из PyPI и/или VCS. Такой подход имеет ряд недостатков:
- производительность - каждый раз необходима скачивать и собирать пакеты что занимает большое количество времени
- работа в оффлайн режиме - без подключения к интернету не получится установить зависимости
- стабильность - установка зависимостей невозможна в случае:
- неполадок на стороне PyPI
- неполадок на стороне VCS (GitHub, Bitbucket, etc)
- нарушения зависимостей (удаление репозитория с Github, удаление пакета из PyPI и тд)
- неполадок у хостинг провайдера, которые могут привести к недоступности необходимых сетевых ресурсов (PyPI, VSC, etc)
Для решения этой проблемы предлагается использование заранее подготовленных пакетов wheel для всех зависимостей и хранение их в репозитории системы.
Создаем архив wheel пакетов
Wheel - это современный формат распространения пакетов в Python среде, который пришел на замену eggs. Рассмотрим процесс создания архива wheel для всех зависимостей системы.
Представим типичный Python проект с файлом requirements.txt содержащим зависимости. Пример файла requirements.txt :
svgwrite==1.1.6 ipython==2.3.0 flask==0.10.1 flask-mongoengine==0.7.1 flask-uploads==0.1.3 -e git://github.com/Samael500/flask-principal.git@dab7f391f0eeb76a25fa1b3dae7308a0924c8a12#egg=flask-principal -e git://github.com/Samael500/flask-security.git@f1042b5db67147b8ddaa8b767b2dfe063bb56ffa#egg=flask-security Flask-Admin==1.0.8 Flask-Session==0.1.1 Flask-Script==2.0.5 gunicorn==19.1.1 Flask-Testing==0.4.2 tornado==4.0.2 nose==1.3.4 pep8==1.5.7 Pillow==2.6.1 pyflakes==0.8.1 pylama==6.1.1 spec==0.11.1 py-bcrypt==0.4 WTForms==1.0.4 blessings==1.6 beautifulsoup4==4.3.2 lxml==3.4.1 -e git://github.com/Samael500/jinja-assets-compressor.git@8e1639cec6f8b347794fe1334519daacc6b763b0#egg=jac PyYAML==3.10
В нашем файле requirements.txt есть зависимости из внешних ресурсов (не PyPI), которые предполагают загрузку пакетов из VCS (в данном случае из git репозиториев на Github). Скопируем старый requirements.txt в requirements-remote.txt , а в requirements.txt заменим внешние ресурсы на обычные пакеты из PyPI и получим:
svgwrite==1.1.6 ipython==2.3.0 flask==0.10.1 flask-mongoengine==0.7.1 flask-uploads==0.1.3 flask-principal flask-security Flask-Admin==1.0.8 Flask-Session==0.1.1 Flask-Script==2.0.5 gunicorn==19.1.1 Flask-Testing==0.4.2 tornado==4.0.2 nose==1.3.4 pep8==1.5.7 Pillow==2.6.1 pyflakes==0.8.1 pylama==6.1.1 spec==0.11.1 py-bcrypt==0.4 WTForms==1.0.4 blessings==1.6 beautifulsoup4==4.3.2 lxml==3.4.1 jac PyYAML==3.10
Это делается для того, чтобы при установке из архива wheel пакетов не происходили запросы к внешним VCS, а брались локальные wheel, которые мы сейчас будем генерировать.
Cоздаем и активируем venv :
pyvenv venv . venv/bin/activate
Устанавливаем все пакеты как обычно, но из requirements-remote.txt :
pip install -r requirements-remote.txt
Сгенерируем архив всех пакетов PyPI, всех их зависимостей и всех зависимостей внешних пакетов (VCS). Для этого нам потребуется свежая версия pip и пакет wheel :
pip install -U pip pip install wheel mkdir wheels pip wheel -w wheels/ -r requirements-remote.txt --pre --allow-all-external
После этого получаем архив wheel пакетов для всех зависимостей кроме внешних (VCS). Для внешних пакетов устанавливаемых из исходников необходимо сгенерировать пакеты вручную при помощи setup.py bdist_wheel :
cd venv/src/flask-principal python setup.py bdist_wheel --dist-dir ../../../wheels/ cd ../flask-security python setup.py bdist_wheel --dist-dir ../../../wheels/ cd ../jac python setup.py bdist_wheel --dist-dir ../../../wheels/
Теперь в директории wheels есть все необходимые пакеты для установки всех зависимостей системы. Процесс уставновки зависимостей из локального архива пакетов выполняется так:
pip install --no-index -f wheels/ -r requirements.txt
обратите внимание, что используется файл requirements.txt , а не requirements-remote.txt .
Тестирование скорости установки
Обычная установка со скачиванием пакетов из PyPI и VCS:
time pip install -r requirements-remote.txt real 4m20.655s user 1m31.242s sys 0m55.539s
Установка из локального архива wheels:
time pip install --no-index -f wheels/ -r requirements.txt real 1m3.412s user 0m4.808s sys 0m31.210s
Из результатов можно сделать вывод, что время установки пакетов из локального архива в нашем случае меньше в 4 раза. Что логично, т.к. пакеты заново не скачиваются из интернета и не компилируются.
Бонус
Для удобства написал небольшой скрипт, автоматизирующий сборку пакетов установленных из исходников.
Пример использования скрипта:
python build_wheels --sources-dir venv/src/ --wheels-dir wheels/
Скрипт пройдется по всем поддиректориям venv/src/ и в каждой из них попробует собрать пакет в директорию wheels/ .
Менеджер пакетов pip
pip — система управления пакетами, которая используется для установки и управления программными пакетами, написанными на Python.
Терминология
- «Дистрибутив» - то, что pip может установить;
- «Пакет» - то, что можно использовать в операторах импорта. Большинство дистрибутивов включают один пакет с тем же именем, что и дистрибутив но есть исключения;
- «Wheel» - это специальный файл с суффиксом .whl;
- Установка wheel просто копирует файлы в нужную директорию без компиляции и обработки.
Примеры
Установка пакетов
Установка пакета из PyPI
pip install requestsУстановка пакета из локального файла wheel
pip install requests-2.22.0-py2.py3-none-any.whlУстановка пакета из Git репозитория
pip install git+https://github.com/psf/requests.gitУстановка пакета из директории
pip install /home/user/src/requestsУдаление пакетов
Чтобы удалить пакет:
pip uninstall SomePackageСписок установленных пакетов
Вывод списка пакетов, установленных через pip
pip listПакеты обновления
$ pip install --upgrade SomePackageобновит пакет SomePackage и все его зависимости. Кроме того, pip автоматически удаляет старую версию пакета перед обновлением.
Чтобы обновить сам пункт, сделайте
$ pip install --upgrade pip$ python -m pip install --upgrade pipна машинах Windows.
Обновление всех устаревших пакетов в Linux
pip не ток содержит флаг , чтобы позволить пользователю обновить все устаревшие пакеты в одном кадре. Тем не менее, это может быть достигнуто путем объединения команд в среде Linux:
pip list --outdated --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -UЭта команда принимает все пакеты в локальном virtualenv и проверяет, устарели ли они. Из этого списка, он получает имя пакета , а затем трубы , которые в pip install -U команду. В конце этого процесса все локальные пакеты должны быть обновлены.
Обновление всех устаревших пакетов в Windows
pip не ток содержит флаг , чтобы позволить пользователю обновить все устаревшие пакеты в одном кадре. Тем не менее, это может быть достигнуто путем объединения команд в среде Windows:
for /F "delims -require-txt-">Создайте файл require.txt для всех пакетов в системеpipпомогает в созданииrequirements.txtфайлов, предоставляяfreezeопцию.pip freeze > requirements.txtЭто позволит сохранить список всех пакетов и их версию , установленный на систему в файл с именем requirements.txt в текущей папке.
Создайте файл require.txt из пакетов только в текущем virtualenv
pip помогает в создании requirements.txt файлов, предоставляя freeze опцию.
pip freeze --local > requirements.txt--local параметр будет выводить только список пакетов и версий, которые установлены локально на virtualenv. Глобальные пакеты не будут перечислены.
Использование определенной версии Python с pip
Если у вас установлены и Python 3, и Python 2, вы можете указать, какую версию Python вы бы хотели использовать в pip. Это полезно, когда пакеты поддерживают только Python 2 или 3 или когда вы хотите протестировать оба.
Если вы хотите установить пакеты для Python 2, запустите:
pip install [package]pip2 install [package]Если вы хотите установить пакеты для Python 3, выполните:
pip3 install [package]Вы также можете запустить установку пакета для конкретной установки Python с помощью:
\path\to\that\python.exe -m pip install some_package # on Windows OR /usr/bin/python25 -m pip install some_package # on OS-X/LinuxНа платформах OS-X / Linux / Unix важно помнить о различии между системной версией python (обновление которой делает вашу систему неработоспособной) и пользовательской версией (версиями) python. Вы можете, в зависимости от которого вы пытаетесь обновить, необходимо префикс эти команды с sudo и ввода пароля.
Аналогично, в Windows некоторые установки python, особенно те, которые являются частью другого пакета, могут в конечном итоге быть установлены в системные каталоги - те, которые вам придется обновить из командного окна, работающего в режиме администратора, - если вы обнаружите, что вам нужно сделать это , это очень хорошая идея , чтобы проверить , какой питон установки вы пытаетесь обновить с помощью команды , например python -c"import sys;print(sys.path);" или py -3.5 -c"import sys;print(sys.path);" Вы также можете проверить , какой пип вы пытаетесь запустить с pip --version
В Windows, если у вас есть как Python 2 и установлен Python 3, и на вашем пути и вашего питона 3 больше , чем 3,4 , то вы, вероятно , также есть питон пусковая py на вашем системном пути. Затем вы можете делать такие трюки, как:
py -3 -m pip install -U some_package # Install/Upgrade some_package to the latest python 3 py -3.3 -m pip install -U some_package # Install/Upgrade some_package to python 3.3 if present py -2 -m pip install -U some_package # Install/Upgrade some_package to the latest python 2 - 64 bit if present py -2.7-32 -m pip install -U some_package # Install/Upgrade some_package to python 2.7 - 32 bit if presentЕсли вы работаете и поддерживать несколько версий питона я настоятельно рекомендую прочитать до о питона virtualenv или venv виртуальных окружающих средах , которые позволяют выделить как версию питона и пакеты , которые присутствуют.
Установка пакетов еще не на пипе, как колеса
Многие чистые пакеты python еще не доступны в индексе пакетов Python в виде колес, но все равно устанавливаются нормально. Однако некоторые пакеты в Windows выдают ужасную ошибку vcvarsall.bat not found.
Проблема заключается в том, что пакет , который вы пытаетесь установить , содержит C или расширение C ++ и не в настоящее время доступно в качестве встроенного колеса с индексом питона пакета, PyPI, а на окнах не имеет цепочки инструментов , необходимую для создания такие предметы.
Самый простой ответ должен пойти на Кристофа Gohlke в отличном месте и найти соответствующую версию библиотеки , которые вам нужны. При необходимости в пакете назвать -cp *** NN * - должно соответствовать вашей версии питона, то есть , если вы используете Windows 32 разрядного питона даже на Win64 имя должны включать -win32- и при использовании 64 - битный питона его должна включать в себя -win_amd64- , а затем версия питона должен соответствовать, то есть для Python 34 файла должно включать в себя -cp * 34 - *** и т.д. , это в основном магия , что пип делает для вас на сайте PyPi.
Кроме того, вам нужно получить соответствующий комплект разработки для Windows для используемой версии python, заголовки для любой библиотеки, к которой интерфейс пытается подключить пакет, возможно, заголовки python для версии python и т. Д.
Python 2.7 использовал Visual Studio 2008, Python 3.3 и 3.4 использовал Visual Studio 2010, а Python 3.5+ использует Visual Studio 2015.
- Установить « Visual C ++ Compiler пакет для Python 2.7 », которая доступна на веб - сайте Microsoft или
- Установка « Windows SDK для Windows 7 и .NET Framework 4 » (v7.1), которая доступна на веб - сайте Microsoft или
- Установка Visual Studio 2015 Community Edition , (или более поздней версии, когда они будут освобождены),гарантируя вам не выбрать опции для установки Поддержка C & C ++больше не по умолчанию - Мне сказали , что это может занять до8 часов , чтобы загрузить и установить поэтому убедитесь , что эти параметры установлены на первую попытку.
Тогда вам может понадобиться , чтобы найти файлы заголовки, на пересмотре соответствия для любых библиотек , что ваши желаемых пакет ссылки и загружать те , на соответствующие места.
Наконец , вы можете позволить пип сделать построение - конечно , если пакет имеет зависимости , которые вы еще не имеют также может потребоваться , чтобы найти файлы заголовков для них.
Альтернативы: Кроме того , стоит глядя, как на PyPI или сайте Christop, за любой чуть более ранней версии пакета , который вы ищете , что в чистом виде питона или предварительно построенный для вашей платформы и питона версии и , возможно , с помощью тех, если найдено, пока ваша посылка не станет доступной. Точно так же , если вы используете самую последнюю версию питона вы можете обнаружить , что он принимает сопровождающим пакета немного времени , чтобы догнать так и для проектов , которые действительно нуждаются в конкретный пакет , который вы , возможно , придется использовать немного старше питона на данный момент. Вы также можете проверить исходный сайт пакетов, чтобы увидеть, есть ли разветвленная версия, которая доступна в готовом виде или в виде чистого Python, и найти альтернативные пакеты, которые предоставляют функции, которые вам необходимы, но доступны - один из примеров, который приходит на ум, это Подушка , активно поддерживается, падение в замене для PIL в настоящее время не обновляется в течение 6 лет и не доступны для Python 3.
Послесловие, я хотел бы призвать всех , кто оказывает эту проблему , чтобы перейти к системе отслеживания ошибок для пакета и добавить или рейз , если есть не один уже, билет вежливо просит, чтобы пакет Сопровождающие обеспечить колесо на PyPI для конкретных Сочетание платформы и Python, если это будет сделано, то, как правило, со временем все станет лучше, некоторые разработчики пакетов не понимают, что пропустили определенную комбинацию, которую могут использовать люди.
Примечание по установке предварительных выпусков
Пип следует правилам семантического Поддержка версий и по умолчанию предпочитает выпустил пакеты по пре-релизам. Так что, если данный пакет был выпущен как V0.98 , и есть релиз - кандидат V1.0-rc1 поведение по умолчанию pip install будет установить V0.98 - если вы хотите установить релиз - кандидат, рекомендуется для тестирования в виртуальной среде , во- первых, вы можете включить это сделать с --pip install --pre имя-пакета или --pip install --pre --upgrade имя-пакета. Во многих случаях в предварительных выпусках или у кандидатов на выпуск могут не быть колес, созданных для всех комбинаций платформы и версии, поэтому вы с большей вероятностью столкнетесь с вышеуказанными проблемами.
Замечание по установке версий разработки
Вы также можете использовать pip для установки разрабатываемых версий пакетов из github и других местоположений, поскольку такой код постоянно обновляется, маловероятно, что для него будут созданы колеса, поэтому любые нечистые пакеты потребуют наличия инструментов сборки, и они могут быть расторгнута в любое время , поэтому пользователю настоятельно рекомендуется устанавливать только такие пакеты в виртуальной среде.
Для таких установок существует три варианта:
- Загрузка сжатого снимка, большинство систем контроля версий в Интернете имеют возможность загрузить сжатый снимок кода. Это можно загрузить вручную и затем устанавливается с pip install путь / к / загруженному / примечанию файла, для большинства форматов сжатия пипа будет обрабатывать распаковки в области кэша и т.д.
Синтаксис
Интерфейс использования: pip [options] Команды: install Установка пакетов. download Скачивание пакетов. uninstall Удаление пакетов. freeze Вывод установленных пакетов в формате файла зависимостей. list Вывод списка установленных пакетов. show Вывод информации об установленных пакетах. check Проверка совместимости установленных пакетов с их зависимостями. config Управление локальной и глобальной конфигурацией. search Поиск пакетов в PyPI. wheel Сборка wheel из зависимостей. hash Вычисление хешей из hashes of package archives. completion Вспомогательная команда для автодополнения командной строки. debug Вывод информации применимой для отладки. help Вывод справки по командам. Общие опции: -h, --help Вывод справки. --isolated Запуск pip в изолированном режиме, с игнорированием переменных окружения и пользовательскую конфигурацию. -v, --verbose Расширенный вывод. Опция аддитивная и может использоваться до 3 раз. -V, --version Вывод версии. -q, --quiet Сокращенный вывод. Опция аддитивная и может использоваться до 3 раз (соответствует уровням логирования WARNING, ERROR, и CRITICAL). --log Путь инкрементального вывода логов. --proxy Настройки прокси в форме [user:passwd@]proxy.server:port. --retries Максимальное количество попыток, которое должно предпринять каждое соединение (по умолчанию 5 раз). --timeout Установить время ожидания сокета (по умолчанию 15 секунд). --exists-action Действие по умолчанию, когда путь уже существует: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort. --trusted-host Пометить хост как доверенный, в случае если HTTPS хоста инвалидный. --cert Путь к альтернативному комплекту CA. --client-cert Путь к сертификату клиента SSL, отдельный файл, содержащий закрытый ключ и сертификат в формате PEM. --cache-dir Настройка директории кеширования данных. --no-cache-dir Отключение кеша. --disable-pip-version-check Отключение периодической проверки PyPI на доступность новой версии pip. --no-color Подавление цветного вывода.Параметры
Примечания
При необходимости, pip выполняет компиляцию нативного кода. В Linux Python автоматически выберет доступный компилятор C в вашей системе.
Инструмент pip и альтернативные источники пакетов — Python: Настройка окружения
Ранее в курсе мы установили пакет cowsay. Если не уточнить иное, то pip устанавливает пакеты из основного индекса — PyPI. Оттуда был взят и пакет cowsay.
В большинстве случаев PyPI — это именно тот источник пакетов, который нам нужен. Но бывают случаи, когда пакет находится в альтернативном индексе — например, внутрикорпоративном. Еще бывает так, что пакет вообще не опубликован ни в одном индексе, а просто загружен на GitHub.
Pip умеет работать и с альтернативными индексами и с репозиториями, содержащими исходный код пакетов. В этом уроке мы рассмотрим оба варианта.
Альтернативные индексы пакетов
Если вызывать команду pip install с опцией --index-url , то pip будет искать пакет и все его зависимости в индексе по указанному url-адресу. Давайте попробуем установить пакет из специального тренировочного индекса Test PyPI :
Заметьте, что url-адрес индекса указан в виде что-то-там/simple — именно так по соглашению должны именоваться индексы.
Test PyPI содержит большинство пакетов, которые есть в основном PyPI, но обычно держателям локальных индексов не хочется хранить у себя копии всех версий всех пакетов. Обычно держатели хранят только свои пакеты, а все внешние зависимости получают из другого индекса — обычно это уже общий PyPI.
У pip и для такого случая есть опция: можно в дополнение к --index-url указать --extra-index-url . В такой конфигурации pip ищет каждый пакет в первом индексе, а если не найдет, то обращается к дополнительному индексу. Команда целиком может выглядеть так:
-m pip install --user --index-url https://test.pypi.org/simple --extra-index-url https://pypi.org/simple dogesayУстановка пакетов из репозиториев на GitHub
Иногда пакет не хочется выкладывать на PyPI. Например, когда все еще сырой пакет нужно проверить и попробовать установить. В подобных случаях пакеты устанавливают прямо из git-репозиториев. Давайте установим с помощью pip наш учебный hexlet-boilerplates/python-package :
Этот пакет установится, только если у вас pip версии 20 и выше. Если вы увидите ошибку при установке пакета, попробуйте обновить сам pip такой командой:
-m pip install --user --upgrade pipЗдесь вместо имени пакета указывается тот же url-адрес, который вы использовали бы при клонировании репозитория, но дополненный приставкой git+ . Эта приставка подсказывает pip, что по url-адресу расположен Git-репозиторий — не обязательно размещенный на GitHub.
Во время установки пакета pip вызывает git clone , чтобы клонировать репозиторий во временную директорию. Если репозиторий закрытый, то понадобится ввести имя пользователя и пароль для доступа к репозиторию. Это работает и с приватными репозиториями GitHub.
Вообще pip поддерживает не только Git, но и другие системы контроля версий. Управлять установкой пакетов из этих систем можно очень гибко — например, можно указывать ветки, теги или хеши коммитов, по которым расположена желаемая версия пакета. Подробнее можно почитать в документации .
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
