SlideShare a Scribd company logo
1 of 50
Download to read offline
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
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
История
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
История
2000 • distutils вошел в стандартную библиотеку Python 1.6
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
История
2000 • distutils вошел в стандартную библиотеку Python 1.6
2003 • запущен PyPI
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)
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
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
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
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
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
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
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
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
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
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
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
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Пакетирование
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Пакетирование
Как Dev я хочу:
• думать, как писать программы и библиотеки
• не думать, как распространять программы
• использовать чужие наработки
• делиться своими наработками
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Пакетирование
Как Dev я хочу:
• думать, как писать программы и библиотеки
• не думать, как распространять программы
• использовать чужие наработки
• делиться своими наработками
Как Ops я хочу:
• легко ставить и сносить программы
(при помощи pip)
• иметь свой PyPI-совместимый сервер
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
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
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
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 )
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
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
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
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 )
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
pbr
• pbr (Python Build Reasonableness) — это . . .
• библиотека от разработчиков OpenStack . . .
• для управления setuptools . . .
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
pbr
• pbr (Python Build Reasonableness) — это . . .
• библиотека от разработчиков OpenStack . . .
• для управления setuptools . . .
• с декларативной конфигурацией . . .
• и версиями на основе ревизий и тегов в git
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
pbr
• pbr (Python Build Reasonableness) — это . . .
• библиотека от разработчиков OpenStack . . .
• для управления setuptools . . .
• с декларативной конфигурацией . . .
• и версиями на основе ревизий и тегов в git
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 )
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
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Разработка
• Обновили код — запустили python setup.py install . . . точно?
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Разработка
• Обновили код — запустили python setup.py install . . . точно?
• pip install -e .
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Разработка
• Обновили код — запустили python setup.py install . . . точно?
• pip install -e .
• tox для запуска тестов в изолированных virtualenv’ах
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)
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Приятные мелочи
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
pkg_resources
• модуль из состава setuptools
• изначально создавался как слой доступа к ресурсам пакета
(не забываем, что формат egg появился именно в setuptools)
• позволяет получить метаданные любого установленного пакета
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 "
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 >"
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 )
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
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
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
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 )
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 ] "
Practical
Python
Packaging
История
Пакетирование
setuptools
pbr
Разработка
Приятные
мелочи
pkg_resources
Entry points
Console scripts
Plug-ins
Extras
Проблемы
Собираем все
воедино
Проблемы
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 и др. пакетные менеджеры
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)
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/

More Related Content

What's hot

"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"PyNSK
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
 
Запуск тестов с tox и Docker
Запуск тестов с tox и DockerЗапуск тестов с tox и Docker
Запуск тестов с tox и DockerAlexander Koshelev
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgAndrey Fesenko
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderSQALab
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам AnsibleDenis Honig
 
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшнаCI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшнаMail.ru Group
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinSemen Martynov
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияMichael Pankov
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 

What's hot (19)

"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Кратко о Linux
Кратко о LinuxКратко о Linux
Кратко о Linux
 
Запуск тестов с tox и Docker
Запуск тестов с tox и DockerЗапуск тестов с tox и Docker
Запуск тестов с tox и Docker
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkg
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам Ansible
 
Пакет future
Пакет futureПакет future
Пакет future
 
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшнаCI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
 
file handling in c
file handling in cfile handling in c
file handling in c
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel Pin
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 

Viewers also liked

Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...Python Meetup
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Python Meetup
 
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...Python Meetup
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Wargaming: тыл - фронту!
Wargaming: тыл - фронту!Wargaming: тыл - фронту!
Wargaming: тыл - фронту!Python Meetup
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython Meetup
 
Про асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer WargamingПро асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer WargamingPython Meetup
 
Обзор фреймворка Twisted
Обзор фреймворка TwistedОбзор фреймворка Twisted
Обзор фреймворка TwistedPython Meetup
 
Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне Python Meetup
 
Redis. Как мы боролись со сложностью
Redis. Как мы боролись со сложностьюRedis. Как мы боролись со сложностью
Redis. Как мы боролись со сложностьюPython Meetup
 
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...Python Meetup
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеPython Meetup
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014Python Meetup
 

Viewers also liked (16)

Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
 
Pebble
PebblePebble
Pebble
 
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Wargaming: тыл - фронту!
Wargaming: тыл - фронту!Wargaming: тыл - фронту!
Wargaming: тыл - фронту!
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.by
 
Про асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer WargamingПро асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer Wargaming
 
Обзор фреймворка Twisted
Обзор фреймворка TwistedОбзор фреймворка Twisted
Обзор фреймворка Twisted
 
Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне
 
Redis. Как мы боролись со сложностью
Redis. Как мы боролись со сложностьюRedis. Как мы боролись со сложностью
Redis. Как мы боролись со сложностью
 
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
 

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

Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practicesIgor Kurochkin
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.Roman Brovko
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеAndrey Kazarinov
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Mail.ru Group
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circlewebriders
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияBadoo Development
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into BadooAnton Turetsky
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты7bits
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьPVasili
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoAzamat Tokhtaev
 

Similar to Practical Python Packaging / Стас Рудаков / Web Developer Wargaming (20)

Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Django. Web project full circle
Django. Web project full circleDjango. Web project full circle
Django. Web project full circle
 
Python dependencies
Python dependenciesPython dependencies
Python dependencies
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрация
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into Badoo
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
 

More from Python Meetup

Python для анализа данных
Python для анализа данныхPython для анализа данных
Python для анализа данныхPython Meetup
 
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python Meetup
 
Использование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузкиИспользование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузкиPython Meetup
 
Введение в GIL и новый GIL
Введение в GIL и новый GILВведение в GIL и новый GIL
Введение в GIL и новый GILPython Meetup
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки PythonPython Meetup
 
Социальный игровой сервер на Python: от первого коммита до продакшена
Социальный игровой сервер на Python: от первого коммита до продакшенаСоциальный игровой сервер на Python: от первого коммита до продакшена
Социальный игровой сервер на Python: от первого коммита до продакшенаPython Meetup
 
Портируем на Python 3
Портируем на Python 3Портируем на Python 3
Портируем на Python 3Python Meetup
 
Garbage collector and a bit of memory management
Garbage collector and a bit of memory managementGarbage collector and a bit of memory management
Garbage collector and a bit of memory managementPython Meetup
 
Неочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкцийНеочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкцийPython Meetup
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Dictionary в Python. По мотивам Objects/dictnotes.txt
Dictionary в Python. По мотивам Objects/dictnotes.txtDictionary в Python. По мотивам Objects/dictnotes.txt
Dictionary в Python. По мотивам Objects/dictnotes.txtPython Meetup
 

More from Python Meetup (11)

Python для анализа данных
Python для анализа данныхPython для анализа данных
Python для анализа данных
 
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
 
Использование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузкиИспользование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузки
 
Введение в GIL и новый GIL
Введение в GIL и новый GILВведение в GIL и новый GIL
Введение в GIL и новый GIL
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки Python
 
Социальный игровой сервер на Python: от первого коммита до продакшена
Социальный игровой сервер на Python: от первого коммита до продакшенаСоциальный игровой сервер на Python: от первого коммита до продакшена
Социальный игровой сервер на Python: от первого коммита до продакшена
 
Портируем на Python 3
Портируем на Python 3Портируем на Python 3
Портируем на Python 3
 
Garbage collector and a bit of memory management
Garbage collector and a bit of memory managementGarbage collector and a bit of memory management
Garbage collector and a bit of memory management
 
Неочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкцийНеочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкций
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Dictionary в Python. По мотивам Objects/dictnotes.txt
Dictionary в Python. По мотивам Objects/dictnotes.txtDictionary в Python. По мотивам Objects/dictnotes.txt
Dictionary в Python. По мотивам Objects/dictnotes.txt
 

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