Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Practical Python Packaging / Стас Рудаков / Web Developer Wargaming

1,855 views

Published on

Распространено мнение, что навык пакетирования своих наработок необходим только гуру в Open Source. Стас развенчал этот миф и показал несколько практических задач, решаемых при помощи пакетирования кода.

Published in: Software
  • Be the first to comment

Practical Python Packaging / Стас Рудаков / Web Developer Wargaming

  1. 1. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Practical Python Packaging Stas Rudakou stas@garage22.net Minsk Python Meetup November 2014
  2. 2. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История
  3. 3. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6
  4. 4. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI
  5. 5. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg)
  6. 6. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout
  7. 7. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv
  8. 8. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip
  9. 9. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools
  10. 10. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3
  11. 11. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3 2012 • venv включен в стандартную библиотеку Python 3.3
  12. 12. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3 2012 • venv включен в стандартную библиотеку Python 3.3 2012 • дистрибутив Anaconda, пакетный менеджер conda
  13. 13. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3 2012 • venv включен в стандартную библиотеку Python 3.3 2012 • дистрибутив Anaconda, пакетный менеджер conda 2013 • объединение проектов distribute и setuptools
  14. 14. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3 2012 • venv включен в стандартную библиотеку Python 3.3 2012 • дистрибутив Anaconda, пакетный менеджер conda 2013 • объединение проектов distribute и setuptools 2013 • pip и easy_install начинают использовать SSL
  15. 15. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3 2012 • venv включен в стандартную библиотеку Python 3.3 2012 • дистрибутив Anaconda, пакетный менеджер conda 2013 • объединение проектов distribute и setuptools 2013 • pip и easy_install начинают использовать SSL 2013 • формат Wheel
  16. 16. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино История 2000 • distutils вошел в стандартную библиотеку Python 1.6 2003 • запущен PyPI 2004 • выпуск setuptools (easy_install, формат egg) 2006 • выпуск buildout 2007 • выпуск virtualenv 2008 • выпуск pip 2008 • distribute — форк setuptools 2012 • distutils2/packaging не вошел в Python 3.3 2012 • venv включен в стандартную библиотеку Python 3.3 2012 • дистрибутив Anaconda, пакетный менеджер conda 2013 • объединение проектов distribute и setuptools 2013 • pip и easy_install начинают использовать SSL 2013 • формат Wheel 2014 • в Python 3.4 вошли скрипты для установки pip
  17. 17. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Пакетирование
  18. 18. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Пакетирование Как Dev я хочу: • думать, как писать программы и библиотеки • не думать, как распространять программы • использовать чужие наработки • делиться своими наработками
  19. 19. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Пакетирование Как Dev я хочу: • думать, как писать программы и библиотеки • не думать, как распространять программы • использовать чужие наработки • делиться своими наработками Как Ops я хочу: • легко ставить и сносить программы (при помощи pip) • иметь свой PyPI-совместимый сервер
  20. 20. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 $ f i n d . 2 . 3 ./ h e l l o 4 ./ h e l l o / data . j s o n 5 ./ h e l l o /__init__ . py 6 ./ h e l l o / world . py
  21. 21. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 $ f i n d . 2 . 3 ./ h e l l o 4 ./ h e l l o / data . j s o n 5 ./ h e l l o /__init__ . py 6 ./ h e l l o / world . py 7 ./ t e s t s /__init__ . py 8 ./ t e s t s / t e s t _ h e l l o . py
  22. 22. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 $ f i n d . 2 . 3 ./ h e l l o 4 ./ h e l l o / data . j s o n 5 ./ h e l l o /__init__ . py 6 ./ h e l l o / world . py 7 ./ t e s t s /__init__ . py 8 ./ t e s t s / t e s t _ h e l l o . py 9 10 setup . py
  23. 23. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 from s e t u p t o o l s import setup , find_packages 2 setup ( 3 name = " h e l l o −world " , 4 v e r s i o n = " 0.1 " , 5 packages = find_packages ( exclude =[" t e s t s " ] ) , 6 7 i n s t a l l _ r e q u i r e s = [ " d o c u t i l s >=0.3" ] , 8 package_data = { 9 # I f any package c o n t a i n s ∗. r s t f i l e s , i n c l u d e them 10 "" : [ " ∗. r s t " ] , 11 # And i n c l u d e any ∗. j s o n f i l e s found i n the " h e l l o " package 12 " h e l l o " : [ " ∗. j s o n " ] , 13 } , 14 15 author = " Stas Rudakou" , 16 author_email = " stas@garage22 . net " , 17 d e s c r i p t i o n = " This i s an Example Package" , 18 )
  24. 24. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 $ python setup . py i n s t a l l
  25. 25. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 $ python setup . py i n s t a l l 2 $ python setup . py s d i s t 3 $ l s d i s t 4 h e l l o −world −0.1. t a r . gz
  26. 26. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 $ f i n d . 2 . 3 ./ h e l l o 4 ./ h e l l o / data . j s o n 5 ./ h e l l o /__init__ . py 6 ./ h e l l o / world . py 7 ./ t e s t s /__init__ . py 8 ./ t e s t s / t e s t _ h e l l o . py 9 10 setup . py 11 setup . cfg 12 README. r s t 13 MANIFEST. i n
  27. 27. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино setuptools 1 import os . path 2 from s e t u p t o o l s import setup , find_packages 3 4 t h i s _ d i r = os . path . dirname ( __file__ ) 5 with open ( os . path . j o i n ( this_dir , ’README. r s t ’ ) ) as f : 6 README = f . read () 7 8 setup ( 9 name = " h e l l o −world " , 10 v e r s i o n = " 0.1 " , 11 # . . . 12 l o n g _ d e s c r i p t i o n=README 13 )
  28. 28. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pbr • pbr (Python Build Reasonableness) — это . . . • библиотека от разработчиков OpenStack . . . • для управления setuptools . . .
  29. 29. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pbr • pbr (Python Build Reasonableness) — это . . . • библиотека от разработчиков OpenStack . . . • для управления setuptools . . . • с декларативной конфигурацией . . . • и версиями на основе ревизий и тегов в git
  30. 30. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pbr • pbr (Python Build Reasonableness) — это . . . • библиотека от разработчиков OpenStack . . . • для управления setuptools . . . • с декларативной конфигурацией . . . • и версиями на основе ревизий и тегов в git
  31. 31. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pbr • pbr (Python Build Reasonableness) — это . . . • библиотека от разработчиков OpenStack . . . • для управления setuptools . . . • с декларативной конфигурацией . . . • и версиями на основе ревизий и тегов в git 1 from s e t u p t o o l s import setup 2 3 setup ( 4 setup_requires =[ ’ pbr ’ ] , 5 pbr=True , 6 )
  32. 32. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pbr 1 [ metadata ] 2 name = h e l l o −world 3 author = Stas Rudakou 4 author−email = stas@garage22 . net 5 d e s c r i p t i o n −f i l e = README. r s t 6 [ f i l e s ] 7 packages = 8 h e l l o Listing 1: setup.cfg 1 d o c u t i l s >=0.3 Listing 2: requirements.txt
  33. 33. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Разработка • Обновили код — запустили python setup.py install . . . точно?
  34. 34. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Разработка • Обновили код — запустили python setup.py install . . . точно? • pip install -e .
  35. 35. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Разработка • Обновили код — запустили python setup.py install . . . точно? • pip install -e . • tox для запуска тестов в изолированных virtualenv’ах
  36. 36. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Разработка • Обновили код — запустили python setup.py install . . . точно? • pip install -e . • tox для запуска тестов в изолированных virtualenv’ах • свой PyPI-сервер — это просто (nginx или devpi)
  37. 37. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Приятные мелочи
  38. 38. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pkg_resources • модуль из состава setuptools • изначально создавался как слой доступа к ресурсам пакета (не забываем, что формат egg появился именно в setuptools) • позволяет получить метаданные любого установленного пакета
  39. 39. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино pkg_resources • модуль из состава setuptools • изначально создавался как слой доступа к ресурсам пакета (не забываем, что формат egg появился именно в setuptools) • позволяет получить метаданные любого установленного пакета 1 >>> import pkg_resources 2 >>> d i s t = pkg_resources . g e t _ d i s t r i b u t i o n ( " p y t e s t " ) 3 >>> d i s t . project_name 4 " p y t e s t " 5 >>> d i s t . v e r s i o n 6 " 2 . 6 . 4 "
  40. 40. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Entry points 1 setup ( 2 name="my−package " , 3 # other arguments here . . . 4 entry_points={ 5 " group1 " : [ 6 "name1 = my_package . some_module : func1 " , 7 "name2 = my_package . other_module" , 8 ] , 9 } 10 ) 1 >>> import pkg_resources 2 >>> f o r ep i n pkg_resources . iter_entry_points ( " group1 " ) : 3 . . . p r i n t ( ep . d i s t . project_name , ep . name , r e p r ( ep . load ) ) 4 my−package name1 "<f u n c t i o n func1 at 0 x7ff5091e5730 >" 5 my−package name2 "<module ’ other_module ’ from . . . >" 6 other −package name3 "<f u n c t i o n func3 at 0 x7ff5091e5730 >"
  41. 41. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Console scripts 1 setup ( 2 name=" mysite " , 3 # other arguments here . . . 4 i n s t a l l _ r e q u i r e s = [ "Django >=1.7,<1.8" ] , 5 entry_points={ 6 " c o n s o l e _ s c r i p t s " : [ 7 "mysite_manage = mysite_manage : main" , 8 ] , 9 } 10 )
  42. 42. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Console scripts 1 setup ( 2 name=" mysite " , 3 # other arguments here . . . 4 i n s t a l l _ r e q u i r e s = [ "Django >=1.7,<1.8" ] , 5 entry_points={ 6 " c o n s o l e _ s c r i p t s " : [ 7 "mysite_manage = mysite_manage : main" , 8 ] , 9 } 10 ) 1 ( myvenv ) $ pip i n s t a l l mysite 2 ( myvenv ) $ which mysite_manage 3 /tmp/myvenv/ bin /mysite_manage 4 ( myvenv ) $ l s −l ‘ which mysite_manage ‘ 5 −rwxr−xr−x 1 s t a s s t a s 300 Nov 28 19:00 /tmp/myvenv/ bin /mysite_manage
  43. 43. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Console scripts & Django 1 import os , sys 2 3 if __name__ == "__main__": 4 os.environ.setdefault(" DJANGO_SETTINGS_MODULE ", "mysite.settings") 5 from django.core.management import execute_from_command_line 6 execute_from_command_line (sys.argv) Listing 3: manage.py из состава Django 1 import os ,sys 2 3 def main (): 4 os.environ.setdefault(" DJANGO_SETTINGS_MODULE ", "mysite.settings") 5 from django.core.management import execute_from_command_line 6 execute_from_command_line (sys.argv) 7 8 if __name__ == "__main__": 9 main () Listing 4: mysite_manage.py
  44. 44. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Plug-ins на примере pytest 1 setup ( 2 name=" pytest −cov " , 3 d e s c r i p t i o n="py . t e s t p l u g i n f o r coverage r e p o r t i n g with " 4 " support f o r both c e n t r a l i s e d and d i s t r i b u t e d t e s t i n g , " 5 " i n c l u d i n g s u b p r o c e s s e s and m u l t i p r o c e s s i n g " , 6 # other arguments here . . . 7 i n s t a l l _ r e q u i r e s =[ 8 "py >=1.4.22" , 9 " pytest >=2.6.0" , 10 " coverage >=3.7.1" , 11 "cov−core >=1.14.0" 12 ] , 13 entry_points={ 14 " pytest11 " : [ " pytest_cov = pytest_cov " ] 15 } , 16 ) Listing 5: setup.py pytest-плагина pytest-cov
  45. 45. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Extras 1 setup ( 2 name=" c e l e r y " , 3 d e s c r i p t i o n=" D i s t r i b u t e d Task Queue" , 4 # other arguments here . . . 5 e x t r a s _ r e q u i r e={ 6 " cassandra " : [ " pycassa " ] , 7 "mongodb" : [ "pymongo >=2.6.2" ] , 8 "msgpack" : [ "msgpack−python >=0.3.0" ] , 9 " r e d i s " : [ " r e d i s >=2.8.0" ] , 10 "zeromq" : [ "pyzmq >=13.1.0" ] , 11 } 12 )
  46. 46. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Extras 1 setup ( 2 name=" c e l e r y " , 3 d e s c r i p t i o n=" D i s t r i b u t e d Task Queue" , 4 # other arguments here . . . 5 e x t r a s _ r e q u i r e={ 6 " cassandra " : [ " pycassa " ] , 7 "mongodb" : [ "pymongo >=2.6.2" ] , 8 "msgpack" : [ "msgpack−python >=0.3.0" ] , 9 " r e d i s " : [ " r e d i s >=2.8.0" ] , 10 "zeromq" : [ "pyzmq >=13.1.0" ] , 11 } 12 ) $ pip i n s t a l l " c e l e r y [ mongodb , msgpack , zeromq ] "
  47. 47. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Проблемы
  48. 48. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Проблемы и ограничения • инструменты не всегда следят за конфликтами • нет понятия “поставлен по зависимости” • неочевидные различия между pip i n s t a l l X Y pip i n s t a l l X pip i n s t a l l Y pip i n s t a l l Y pip i n s t a l l X • pip ведет себя не так, как apt-get, yum и др. пакетные менеджеры
  49. 49. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Собираем все воедино 1 наше настоящее: virtualenv + pip + setuptools + wheel 2 на систему пакетирования мы хотим возложить • кроссплатформенные решения проблем сборки и запуска • типичные задачи по разбиению программы на компоненты 3 на систему пакетирования мы не хотим возлагать управление системой (для этого есть ansible, chef, puppet, salt)
  50. 50. Practical Python Packaging История Пакетирование setuptools pbr Разработка Приятные мелочи pkg_resources Entry points Console scripts Plug-ins Extras Проблемы Собираем все воедино Стас Рудаков mailto:stas@garage22.net https://raw.github.com/nott/talks/ppp.pdf https://packaging.python.org/ https://pythonhosted.org/setuptools/

×