Slide 1

Slide 1 text

Twisted history of Python Packaging

Slide 2

Slide 2 text

Mahdi Yusuf @myusuf3 Pycoder’s Weekly

Slide 3

Slide 3 text

FOCUS UP. This journey is a story of growth which is often extremely convoluted.

Slide 4

Slide 4 text

setup.py developers pypi metadata end user

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

import os import sys try: from setuptools import setup except ImportError: from distutils.core import setup sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from octogit import __version__ def publish(): os.system("python setup.py sdist upload") if sys.argv[-1] == "publish": publish() sys.exit() dependencies = ['clint2','requests'] setup( name='octogit', version=".".join(str(x) for x in __version__), description='giving git tentacles to work better with github', url='https://github.com/myusuf3/octogit', author='Mahdi Yusuf', author_email='yusuf.mahdi@gmail.com', install_requires=dependencies, tests_require=['tox==1.3'], packages=['octogit', ], license='MIT License', long_description=open('README.rst').read(), entry_points={ 'console_scripts': [ 'octogit = octogit.cli:begin', ], }, classifiers=( 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'Natural Language :: English', 'License :: OSI Approved :: MIT License', 'Programming Language :: Python', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', ))

Slide 7

Slide 7 text

distribute distutils2 setuptools distutils

Slide 8

Slide 8 text

distutils from distutils.core import setup setup(name='sadness', version='11.0', py_modules=['sadistic.py']) $ python setup.py sdist $ python setup.py install

Slide 9

Slide 9 text

distutils No dependency management.

Slide 10

Slide 10 text

distutils No consistent way to reproduce an installation.

Slide 11

Slide 11 text

distutils Not all metadata is handled.

Slide 12

Slide 12 text

distribute distutils2 setuptools distutils

Slide 13

Slide 13 text

setuptools built on distutils.

Slide 14

Slide 14 text

setuptools no way to uninstall installed packages.

Slide 15

Slide 15 text

setuptools provides dependency management.

Slide 16

Slide 16 text

setuptools introduces easy_install.

Slide 17

Slide 17 text

setuptools eggs.

Slide 18

Slide 18 text

setuptools misunderstood.

Slide 19

Slide 19 text

distribute distutils2 setuptools distutils

Slide 20

Slide 20 text

distribute fork of setuptools.

Slide 21

Slide 21 text

distribute distutils2 setuptools distutils

Slide 22

Slide 22 text

versioning. distutils2

Slide 23

Slide 23 text

1.1 “Return of the Mac” Musky Monkey demo5.unreleased 5 6 42 Public API Changes Features, Deprecations Bug Fixes

Slide 24

Slide 24 text

setup.cfg distutils2

Slide 25

Slide 25 text

distutils2 [metadata] name = sadness version = 11.0 author = Mahdi Yusuf author-email = mahdi@sadness.co.uk summary = sending you sadness description-file = README.rst project-url: http://www.twitter.com/myusuf3 [files] packages = sadness extra_files = setup.py README resources = etc/pytz.timezones

Slide 26

Slide 26 text

distutils2 pysetup.

Slide 27

Slide 27 text

defined requirements based on environment. distutils2

Slide 28

Slide 28 text

discontinued? distutils2

Slide 29

Slide 29 text

Attack of the PEPS

Slide 30

Slide 30 text

PEP 386 -- Changing the version comparison modules PEP 376 -- Database of Installed Python Distributions PEP 345 -- Metadata for Python Software Packages 1.2

Slide 31

Slide 31 text

setuptools easy_install distribute pip old busted new hawtness

Slide 32

Slide 32 text

fin. twitter.com/myusuf3