PyPI

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
PyPI
Изображение логотипа
URL pypi.org
Тип сайта репозиторий программного обеспечения
Язык многоязычный
Язык программирования различные
Владелец Python Software Foundation
Начало работы 2003[1]
Текущий статус активный

PyPI (аббр. от англ. Python Package Index — «каталог пакетов Python», произн. /ˌppiˈ/) — каталог программного обеспечения, написанного на языке программирования Python[2]. В сочетании с системами управления библиотечными пакетами (pip, easy_install) аналогичен PEAR для PHP и CPAN для Perl[3]. По состоянию на февраль 2020 года содержит более 216 000 пакетов[4], тогда как в 2010 году пакетов было всего около 10 000[5].

Модуль Python Distribution Utilities (distutils) был впервые добавлен в стандартную библиотеку Python в выпуске 1.6.1 в сентябре 2000 года, а затем в выпуске 2.0 в октябре 2000 года, через девять лет после первого выпуска Python в феврале 1991 года, с целью упрощения процесса установки сторонних пакетов Python.[6][7]

Однако, distutils предоставлял только инструменты для упаковки кода Python, и не более того. Он мог собирать и распространять метаданные, но не использовал их для других целей.[8] Python по-прежнему не имел централизованного каталога пакетов в интернете. PEP 241, предложение по стандартизации метаданных для индексов, было окончательно утверждено в марте 2001 года.[9] Предложение о создании всеобъемлющего централизованного каталога, размещенного на домене python.org, было окончательно утверждено в ноябре 2002 года.[10][8]

16 апреля 2018 года весь трафик PyPI начал обслуживаться более современной веб-платформой: Warehouse. Устаревший веб-сайт был отключен в конце того же месяца.[11][12] Все существующие пакеты были перенесены на новую платформу с сохранением их истории.[13]

В мае 2023 года Python Software Foundation сообщил, что Министерство юстиции США запросило данные пользователей пяти участников PyPI.[14][15] Представитель организации дополнительно пояснил, что они ожидают конфиденциальности от участников, но также соблюдают закон и постановления суда, и по этой причине передали данные, запрошенные правительством.[14]

Регистрация в каталоге

[править | править код]

Авторы сами регистрируют в каталоге свои пакеты (первый раз им необходимо предоставить данные и о себе) на PyPI[16]:

python setup.py register

Метаданные обычно хранятся в файле setup.py в составе приготовленного к распространению пакета, а загрузка пакета осуществляется одной командой[17]:

python setup.py sdist—format=zip,gztar upload

Требуемые для регистрации метаданные зафиксированы в PEP241[18] (предложению по развитию Python), принятому в 2001 году. Обязательными являются: версия метаданных, название пакета, версия пакета, платформа (платформы), краткое описание, адрес электронной почты автора, лицензия.

Кроме того, пакет может быть классифицирован с помощью одного или нескольких классификаторов.

Системы управления библиотечными пакетами

[править | править код]

Модуль distutils из стандартной библиотеки Python[19]:

  1. Предоставляет основу для стандартных полей метаданных пакета
  2. Содержит набор утилит для сборки пакета и создания архива для распространения или установщика (для Windows)

Возможности distutils ограничиваются рамками одного пакета, он не имеет возможности определять зависимости.

Система управления пакетами setuptools, основанная на модуле distutils, реализует простейшую систему отслеживания зависимостей, занимается загрузкой пакетов и взаимодействием с PyPI. Пакет setuptools умеет автоматически загружать и устанавливать зависимости пакета.

Утилита easy_install является дополнением к setuptools, и устанавливает их во время своей установки[20].

От проекта setuptools отделился пакет Distribute, который активно развивается и поддерживает Python 3[21].

Предполагается[22], что в разрабатываемый в настоящее время на основе distutils и Distribute пакет distutils2 войдёт в стандартную библиотеку Python. При этом будет сохранена совместимость со старым distutils[23].

Утилита pip является аналогом easy_install[24].

Следующий пример заимствован из файла 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[26].

Примечания

[править | править код]
  1. Packaging History. Python Packaging Authority — PyPA documentation.
  2. Python Package Index Tutorial Архивная копия от 21 мая 2012 на Wayback Machine, 2003-09-24, Jeremy Hylton: weblog
  3. TUF: the update framework. Дата обращения: 21 июля 2012. Архивировано 8 августа 2020 года.
  4. PyPI — the Python Package Index. Дата обращения: 22 июля 2014. Архивировано 15 апреля 2018 года.
  5. Module Counts. Дата обращения: 22 июля 2014. Архивировано 9 июня 2017 года.
  6. Ошибка в сносках?: Неверный тег <ref>; для сносок py1.6 не указан текст
  7. Ошибка в сносках?: Неверный тег <ref>; для сносок py2.0 не указан текст
  8. 1 2 Ошибка в сносках?: Неверный тег <ref>; для сносок pep 301 не указан текст
  9. Ошибка в сносках?: Неверный тег <ref>; для сносок pep 241 не указан текст
  10. Ошибка в сносках?: Неверный тег <ref>; для сносок ancient pypi tutorial не указан текст
  11. Welcome to Warehouse's documentation!
  12. Python Insider: New PyPI launched, legacy PyPI shutting down April 30. Python Software Foundation (16 апреля 2018). Дата обращения: 1 июня 2018.
  13. A new package index for Python. LWN.net. Дата обращения: 1 июня 2018.
  14. 1 2 Durbin, Ee. PyPI was subpoenaed - The Python Package Index (англ.). blog.pypi.org (24 мая 2023).
  15. Rudra, Sourav (25 мая 2023). The Python Software Foundation Complies with PyPI Subpoenas to Share Some User Data. It's FOSS News (англ.).
  16. Barry, 2010, p. 48.
  17. Alchin, 2010, pp. 241—242.
  18. http://www.python.org/dev/peps/pep-0241/ Архивная копия от 27 мая 2012 на Wayback Machine PEP241
  19. Greg Ward, Anthony Baxter, Distributing Python Modules. Дата обращения: 28 июля 2012. Архивировано 25 октября 2012 года.
  20. Ziadé, 2008, pp. 21—23.
  21. Distribute. Дата обращения: 28 июля 2012. Архивировано из оригинала 29 января 2014 года.
  22. The Hitchhiker’s Guide to Packaging, Current State of Packaging. Дата обращения: 28 июля 2012. Архивировано из оригинала 24 июля 2014 года.
  23. Distutils2 на PyPI. Дата обращения: 28 июля 2012. Архивировано 21 июня 2017 года.
  24. pip. Дата обращения: 28 июля 2012. Архивировано 2 июня 2017 года.
  25. Samuel et al, 2010.
  26. https://www.updateframework.com/wiki/SecuringPythonPackageManagement Архивировано 17 декабря 2012 года. Каркас TUF для безопасного обновления

Литература

[править | править код]