PyPI

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

PyPI (абревіатура від англ. Python Package Index — «каталог пакетів Python») — каталог програмного забезпечення, написаного на мові програмування Python[1]. У поєднанні з системами управління бібліотечними пакетами (pip, easy_install) аналогічні PEAR для PHP і CPAN для Perl[2]. За даними лічильника на головній сторінці в липні 2014 містив дані про більш ніж 46000 пакетів[3], тоді як в 2010 році пакетів було всього близько 10000[4].

Реєстрація в каталозі[ред. | ред. код]

Автори самі реєструють в каталозі свої пакети (перший раз їм необхідно надати дані і про себе) на PyPI [5]:

python setup.py register

Метадані зазвичай зберігаються в файлі setup.py в складі приготованого до поширення пакета, а завантаження пакета здійснюється однією командою [6]:

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

Необхідні для реєстрації метадані зафіксовані в PEP241[7] (пропозиції щодо розвитку Python), прийняті в 2001 році. Обов'язковими є: версія метаданих, назва пакета, версія пакета, платформа (платформи), короткий опис, адреса електронної пошти автора, ліцензія.

Крім того, пакет може бути класифікований за допомогою одного або декількох класифікаторів.

Системи управління бібліотечними пакетами[ред. | ред. код]

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

  1. Надає основу для стандартних полів метаданих пакета
  2. Містить набір утиліт для зборки пакета і створення архіву для поширення або установника (для Windows)

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

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

Утиліта easy_install є доповнення до setuptools, та встановлює їх в процесі своєї установки[9].

Від проекту setuptools відділився пакет Distribute, який активно розвиває та підтримує Python 3[10].

Мається на увазі[11], що в розроблюваний нині на основі distutils та Distribute пакет distutils2 ввійде в стандартну бібліотеку Python. При цьому буде збережена сумісність зі старим distutils[12].

Утиліта pip є аналогом easy_install[13].

Приклад[ред. | ред. код]

Наступний приклад запозичений з файлу 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) розробникам робити свої бібліотеки доступними для користувачів.[14] На сьогоднішній день в PyPI відсутній механізм захисту виявлення оновлень (англ. update discovery) та процесу інсталяції, але існує TUF (англ. The Update Framework) — прототип каркаса для безпечної роботи з PyPI за допомогою утиліти easy_install[15].

Зноски[ред. | ред. код]

  1. Python Package Index Tutorial. Jeremy Hylton: weblog (англ.). 24 вересня 2003. Архів оригіналу за 19 вересня 2015. Процитовано 30 травня 2017.
  2. TUF: the update framework. Архів оригіналу за 8 серпня 2020. Процитовано 30 травня 2017.
  3. PyPI — the Python Package Index. Архів оригіналу за 15 квітня 2018. Процитовано 30 травня 2017.
  4. Module Counts. Архів оригіналу за 9 червня 2017. Процитовано 30 травня 2017.
  5. Barry, 2010, с. 48.
  6. Alchin, 2010, с. 241-242.
  7. PEP 241 — Metadata for Python Software Packages [Архівовано 8 липня 2017 у Wayback Machine.]. Python.org
  8. Greg Ward, Anthony Baxter, Distributing Python Modules. Архів оригіналу за 25 жовтня 2012. Процитовано 30 травня 2017.
  9. Ziadé, 2009, с. 21-23.
  10. Distribute. Архів оригіналу за 29 січня 2014. Процитовано 30 травня 2017.
  11. The Hitchhiker's Guide to Packaging, Current State of Packaging. Архів оригіналу за 24 липня 2014. Процитовано 30 травня 2017.
  12. Distutils2 на PyPI. Архів оригіналу за 21 червня 2017. Процитовано 30 травня 2017.
  13. pip. Архів оригіналу за 2 червня 2017. Процитовано 30 травня 2017.
  14. Samuel та ін., 2010.
  15. Securing Python Package Management. TUF: The Update Framework (англ.). Архів оригіналу за 17 грудня 2012. Процитовано 30 травня 2017.

Література[ред. | ред. код]

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]