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.

2

Share

Download to read offline

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

Download to read offline

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

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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/
  • marxfreedom

    Dec. 17, 2014
  • eigenein

    Dec. 4, 2014

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

Views

Total views

1,986

On Slideshare

0

From embeds

0

Number of embeds

46

Actions

Downloads

38

Shares

0

Comments

0

Likes

2

×