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]:
- Надає основу для стандартних полів метаданих пакета
- Містить набір утиліт для зборки пакета і створення архіву для поширення або установника (для 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].
- ↑ Python Package Index Tutorial. Jeremy Hylton: weblog (англ.). 24 вересня 2003. Архів оригіналу за 19 вересня 2015. Процитовано 30 травня 2017.
- ↑ TUF: the update framework. Архів оригіналу за 8 серпня 2020. Процитовано 30 травня 2017.
- ↑ PyPI — the Python Package Index. Архів оригіналу за 15 квітня 2018. Процитовано 30 травня 2017.
- ↑ Module Counts. Архів оригіналу за 9 червня 2017. Процитовано 30 травня 2017.
- ↑ Barry, 2010, с. 48.
- ↑ Alchin, 2010, с. 241—242.
- ↑ PEP 241 — Metadata for Python Software Packages [Архівовано 8 липня 2017 у Wayback Machine.]. Python.org
- ↑ Greg Ward, Anthony Baxter, Distributing Python Modules. Архів оригіналу за 25 жовтня 2012. Процитовано 30 травня 2017.
- ↑ Ziadé, 2009, с. 21—23.
- ↑ Distribute. Архів оригіналу за 29 січня 2014. Процитовано 30 травня 2017.
- ↑ The Hitchhiker's Guide to Packaging, Current State of Packaging. Архів оригіналу за 24 липня 2014. Процитовано 30 травня 2017.
- ↑ Distutils2 на PyPI. Архів оригіналу за 21 червня 2017. Процитовано 30 травня 2017.
- ↑ pip. Архів оригіналу за 2 червня 2017. Процитовано 30 травня 2017.
- ↑ Samuel та ін., 2010.
- ↑ 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. doi:10.1145/1866307.1866315. ISBN 978-1-4503-0245-6. Процитовано 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.
- pypi.python.org [Архівовано 8 вересня 2008 у Wayback Machine.]
- Офіційний сайт
- Warehouse (Beta) [Архівовано 3 червня 2017 у Wayback Machine.] pre-production deployment of future PyPi web.