PyPI
PyPI (аббр. от англ. Python Package Index — «каталог пакетов Python») — каталог программного обеспечения, написанного на языке программирования Python[2]. В сочетании с системами управления библиотечными пакетами (pip, easy_install) аналогичен PEAR для PHP и CPAN для Perl[3]. По состоянию на февраль 2020 года содержит более 216 000 пакетов[4], тогда как в 2010 году пакетов было всего около 10000[5].
PyPI | |
---|---|
URL | pypi.org |
Тип сайта | репозиторий |
Язык (-и) | многоязычный, в т. ч. русский |
Начало работы | 2003[1] |
Текущий статус | активен |
ИсторияПравить
Модуль Python Distribution Utilities (distutils) впервые был добавлен в стандартную библиотеку Python в версии 1.6.1 в сентябре 2000 г.,[6] All existing packages were migrated to the new platform and their histories preserved.[7] а в версии 2.0 — в октябре 2000 г., через девять лет после первого выпуска Python (февраль 1991 г.) с целю упростить процесс установки сторонних пакетов в Python.[8]
Регистрация в каталогеПравить
Авторы сами регистрируют в каталоге свои пакеты (первый раз им необходимо предоставить данные и о себе) на PyPI[9]:
python setup.py register
Метаданные обычно хранятся в файле setup.py в составе приготовленного к распространению пакета, а загрузка пакета осуществляется одной командой[10]:
python setup.py sdist—format=zip,gztar upload
Требуемые для регистрации метаданные зафиксированы в PEP241[11] (предложению по развитию Python), принятому в 2001 году. Обязательными являются: версия метаданных, название пакета, версия пакета, платформа (платформы), краткое описание, адрес электронной почты автора, лицензия.
Кроме того, пакет может быть классифицирован с помощью одного или нескольких классификаторов.
Системы управления библиотечными пакетамиПравить
Модуль distutils
из стандартной библиотеки Python[12]:
- Предоставляет основу для стандартных полей метаданных пакета
- Содержит набор утилит для сборки пакета и создания архива для распространения или установщика (для Windows)
Возможности distutils
ограничиваются рамками одного пакета, он не имеет возможности определять зависимости.
Система управления пакетами setuptools
, основанная на модуле distutils
, реализует простейшую систему отслеживания зависимостей, занимается загрузкой пакетов и взаимодействием с PyPI. Пакет setuptools
умеет автоматически загружать и устанавливать зависимости пакета.
Утилита easy_install является дополнением к setuptools
, и устанавливает их во время своей установки[13].
От проекта setuptools
отделился пакет Distribute, который активно развивается и поддерживает Python 3[14].
Предполагается[15], что в разрабатываемый в настоящее время на основе distutils
и Distribute
пакет distutils2
войдёт в стандартную библиотеку Python. При этом будет сохранена совместимость со старым distutils
[16].
Утилита pip является аналогом easy_install[17].
ПримерПравить
Следующий пример заимствован из файла setup.py пакета webpy-celery и представляет собой описание метаданных, относящихся к пакету:
setup(
name='webpy-celery',
version=__version__,
url='http://github.com/faruken/webpy-celery',
license='BSD',
author='Faruk Akgul',
author_email='me@akgul.org',
description='Celery wrapper for web.py framework',
long_description=__doc__,
zip_safe=False,
packages=find_packages(exclude=['examples', 'tests']),
platforms='any',
install_requires=[
'web.py>=0.34',
'celery>=2.3.0',
],
classifiers=[
'Environment:: Web Environment',
'Intended Audience:: Developers',
'License:: OSI Approved:: BSD License',
'Operating System:: OS Independent',
'Programming Language:: Python',
'Programming Language:: Python:: 2.5',
'Programming Language:: Python:: 2.6',
'Programming Language:: Python:: 2.7',
'Topic:: Internet:: WWW/HTTP:: Dynamic Content',
'Topic:: Software Development:: Libraries:: Python Modules',
],
)
Использование каталогаПравить
Как указано на сайте PyPI, воспользоваться каталогом можно с помощью команды pip (при условии, что она предварительно установлена):
pip install название_пакета
Или же просто найти, загрузить, разархивировать, а затем запуском файла setup.py установить требуемый пакет:
python setup.py install
В обоих случаях будут автоматически найдены и установлены все зависимости устанавливаемого пакета.
То же самое можно осуществить и с помощью других утилит, например easy install.
БезопасностьПравить
Каталог PyPI служит источником информации для систем обновления программного обеспечения на Python, что неизбежно ставит вопрос обеспечения информационной безопасности. Система управления библиотеками Python позволяет недоверяющим друг другу (англ. mutually distrustful) разработчикам делать свои библиотеки доступными пользователям. В настоящее время в PyPI отсутствует механизм защиты обнаружения обновлений (англ. update discovery) и процесса установки, но существует TUF (англ. The Update Framework) — прототип каркаса для безопасной работы с PyPI посредством утилиты easy_install[19].
ПримечанияПравить
- ↑ Packaging History (неопр.). pypa.io. Дата обращения: 30 марта 2021. Архивировано 16 марта 2021 года.
- ↑ Python Package Index Tutorial Архивировано 23 апреля 2012 года., 2003-09-24, Jeremy Hylton: weblog
- ↑ TUF: the update framework (неопр.). Дата обращения: 21 июля 2012. Архивировано 8 августа 2020 года.
- ↑ PyPI — the Python Package Index (неопр.). Дата обращения: 22 июля 2014. Архивировано 15 апреля 2018 года.
- ↑ Module Counts (неопр.). Дата обращения: 22 июля 2014. Архивировано 9 июня 2017 года.
- ↑ Python Insider: New PyPI launched, legacy PyPI shutting down April 30 (неопр.). Python Software Foundation (16 апреля 2018). Дата обращения: 1 июня 2018. Архивировано 23 апреля 2018 года.
- ↑ A new package index for Python (неопр.). LWN.net. Дата обращения: 1 июня 2018. Архивировано 17 мая 2018 года.
- ↑ Mark Lutz. Learning Python, 5th Edition. — ISBN 978-1449355739. Архивная копия от 8 октября 2021 на Wayback Machine
- ↑ Barry, 2010, p. 48.
- ↑ Alchin, 2010, pp. 241—242.
- ↑ http://www.python.org/dev/peps/pep-0241/ Архивная копия от 27 мая 2012 на Wayback Machine PEP241
- ↑ Greg Ward, Anthony Baxter, Distributing Python Modules (неопр.). Дата обращения: 28 июля 2012. Архивировано 25 октября 2012 года.
- ↑ Ziadé, 2008, pp. 21—23.
- ↑ Distribute (неопр.). Дата обращения: 28 июля 2012. Архивировано из оригинала 29 января 2014 года.
- ↑ The Hitchhiker’s Guide to Packaging, Current State of Packaging (неопр.). Дата обращения: 28 июля 2012. Архивировано из оригинала 24 июля 2014 года.
- ↑ Distutils2 на PyPI (неопр.). Дата обращения: 28 июля 2012. Архивировано 21 июня 2017 года.
- ↑ pip (неопр.). Дата обращения: 28 июля 2012. Архивировано 2 июня 2017 года.
- ↑ Samuel et al, 2010.
- ↑ https://www.updateframework.com/wiki/SecuringPythonPackageManagement Архивировано 17 декабря 2012 года. Каркас TUF для безопасного обновления
СсылкиПравить
ЛитератураПравить
- Paul Barry. Head First Python. — O'Reilly Media, 2010. — 494 с. — ISBN 978-1-4493-8267-4.
- Marty Alchin. Pro Python. — Apress, 2010. — 368 с. — ISBN 978-1-4302-2757-1.
- Justin Samuel, Nick Mathewson, Justin Cappos, and Roger Dingledine. Survivable key compromise in software update systems (англ.) // Proceedings of the XVII ACM conference on Computer and communications security. — N.Y, 2010. — P. 61—72. — ISBN 978-1-4503-0245-6. — doi:10.1145/1866307.1866315.
- Tarek Ziadé. Expert Python Programming. — Packt Publishing, 2008. — 372 с. — ISBN 9781847194947.