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
  3. PyPI — the Python Package Index
  4. Module Counts
  5. Barry, 2010, с. 48.
  6. Alchin, 2010, с. 241-242.
  7. PEP 241 — Metadata for Python Software Packages. Python.org
  8. Greg Ward, Anthony Baxter, Distributing Python Modules
  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
  13. pip
  14. Samuel та ін., 2010.
  15. Securing Python Package Management. TUF: The Update Framework (англ.). Архів оригіналу за 17 грудня 2012. Процитовано 30 травня 2017.

Література

  • Barry, Paul (2010). Head First Python. O'Reilly Media, Inc. ISBN 978-1-4493-8267-4.
  • Alchin, Marty (2010). Pro Python. Apress. ISBN 978-1-4302-2757-1.
  • Hussain, Zahid (2011). Proceedings of the Fall 2010 Future SOC Lab Day. Technische Berichte des Hasso-Plattner-Instituts für Softwaresystemtechnik an der Universität Potsdam (Universitätsverlag Potsdam) (42). ISBN 978-3-86956-114-1.
  • Samuel, Justin; Mathewson, Nick; Cappos, Justin; Dingledine, Roger (2010). Survivable key compromise in software update systems. ACM Press. с. 61. ISBN 978-1-4503-0245-6. doi:10.1145/1866307.1866315. Процитовано 31 травня 2017.
  • Ziadé, Tarek (2009). Expert Python programming: learn best practices to designing, coding, and distributing your Python software. From technologies to solutions (вид. 1. reprint). Birmingham: Packt Publ. ISBN 978-1-84719-494-7.
  • Martelli, Alex (2006). Python in a Nutshell. O'Reilly Media, Inc. ISBN 9780596100469.
  • Lutz, Mark (2006). Programming Python 10 (вид. 3). O'Reilly Media, Inc. ISBN 9780596009250.
  • Ramalho, Luciano (2015). Fluent Python. O'Reilly Media, Inc. ISBN 9781491946268.

Див. також

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.