import antigravity

46
Making life more enjoyable with Python import antigravity

Upload: jeremy-carbaugh

Post on 14-May-2015

2.302 views

Category:

Technology


12 download

DESCRIPTION

No matter how much we love writing software, there are times it makes us want to set fire to our keyboards. We'll take a look at virtualenv, pip, and other module-related technologies that make life a more enjoyable experience.

TRANSCRIPT

Page 1: import antigravity

Making life more enjoyable with Python

import antigravity

Page 2: import antigravity

My name is Jeremy Carbaugh

Page 3: import antigravity
Page 4: import antigravity
Page 5: import antigravity
Page 6: import antigravity

sucks at technology

Page 7: import antigravity

Python

Page 8: import antigravity

modules

Page 9: import antigravity

$ cat markdown.py...def markdown(text, ...):...

>>> from markdown import markdown>>> markdown(‘# Python!’)u’<h1>Python!</h1>’

Page 10: import antigravity

congress/__init__.pycongress/house.pycongress/senate.py

>>> import congress>>> congress.senate<module ‘senate’ from ...

>>> from congress import senate>>> senate<module ‘senate’ from ...

Page 11: import antigravity

$ cat congress/house.pydef impeach(president): ...

>>> from congress.house import impeach>>> if user.party != president.party:>>> impeach(president)

Page 12: import antigravity

$ cat congress/__init__.pyclass Bill(object): def __init__(self, chamber, number, title): self.chamber = chamber self.number = number self.title = title

>>> from congress import Bill>>> hr45 = Bill(‘House’, 1811, ‘GREEN Act’)

Page 13: import antigravity

GREEN Act

To authorize the President to review and approve oil and gas exploration, development, and production projects under existing Federal oil and gas leases, both onshore and offshore, and to limit administrative and judicial proceedings with respect to such projects, upon finding that such a project complies with all applicable Federal laws, and for other purposes.

Page 14: import antigravity

sys.path

Page 15: import antigravity

current directory$PYTHONPATH

default paths

Page 16: import antigravity

>>> import sys>>> for path in sys.path:... print path

/usr/lib/python2.5/usr/lib/python2.5/plat-linux2/usr/lib/python2.5/lib-dynload/usr/local/lib/python2.5/site-packages/usr/lib/python2.5/site-packages/var/lib/python-support/python2.5

Page 17: import antigravity

>>> sys.path.append(‘/path/to/lib’)>>> ‘/path/to/lib’ in sys.pathTrue

Page 18: import antigravity

distutils

Page 19: import antigravity

$ cat setup.pyfrom distutils.core import setupfrom serpente import __version__ setup( name='python-serpente', version=__version__, py_modules=['serpente'],)

Page 20: import antigravity

$ python setup.py installrunning installrunning build...

$ python>>> import serpente>>> serpente.encode(2009)u’MMIX’

Page 21: import antigravity

$ python setup.py sdistrunning sdist...creating python-serpente-0.1...creating dist...

$ ls distpython-serpente-0.1.tar.gz

Page 22: import antigravity

PyPI

Page 23: import antigravity

$ cat setup.pyfrom distutils.core import setupfrom serpente import __version__ setup( name='python-serpente', version=__version__, description='Roman numeral encoder and decoder', license='BSD License', author='Jeremy Carbaugh', author_email='[email protected]', url='http://github.com/jcarbaugh/python-serpente/', py_modules=['serpente'], classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python', ],)

Page 24: import antigravity

$ python setup.py registerrunning registerUsing PyPI login from ~/.pypircServer response (200): OK

Page 25: import antigravity
Page 26: import antigravity

setuptoolsdistutils

Page 27: import antigravity

$ easy_install markdownSearching for markdown...Finished processing dependencies for markdown

Page 28: import antigravity

pipsetuptoolsdistutils

Page 29: import antigravity

$ pip install markdown...Successfully installed markdown

Page 30: import antigravity

$ pip freeze reqs.txt$ cat reqs.txtmarkdown==1.7

$ pip install -r reqs.txt...Successfully installed

Page 31: import antigravity

$ cat reqs.txtmarkdown==1.7-e git://.../python-serpente.git#egg=serpente

$ pip install -r reqs.txtRequirement already satisfied: markdown==1.7...Checking out serpente from git+git://......Successfully installed

Page 32: import antigravity

So what about version conflicts?

Page 33: import antigravity

virtualenvpip

setuptoolsdistutils

Page 34: import antigravity

$ python virtualenv.py sandbox

$ ls sandbox/bin build include lib src

$ ls sandbox/bin/python*sandbox/bin/pythonsandbox/bin/python2.5

Page 35: import antigravity

$ pip install -E sandbox/ markdown...Successfully installed markdown

$ cd sandbox/lib/python2.5/site-packages

$ lsmarkdown-1.7-py2.5.egg-infomarkdown.pypython_serpente-0.1-py2.5.egg-infoserpente.py

Page 36: import antigravity

That’s too much typing.

Page 37: import antigravity

virtualenvwrappervirtualenv

pipsetuptoolsdistutils

Page 38: import antigravity

$ mkvirtualenv sandbox(sandbox)$

(sandbox)$ deactivate$

$ workon sandbox(sandbox)$

Page 39: import antigravity

$ pip install -E sandbox/ markdown

$ workon sandbox(sandbox)$ pip install markdown

Page 40: import antigravity

(sandbox)$ add2virtualenv \> /usr/local/src/django-trunk

(sandbox)$ cdsitepackages

(sandbox)$ cdvirtualenv

Page 41: import antigravity

(sandbox)$ cat bin/postactivatesvn up /usr/local/src/django-trunk

(sandbox)$ deactivate

$ workon sandbox...Updated to revision 10844.

Page 42: import antigravity

let’s wrap this up

Page 43: import antigravity

$ mkvirtualenv labs

(labs)$ svn co http://.../trunk/ sunlightlabs

(labs)$ cd sunlightlabs

(labs)$ pip install -r reqs.txt

(labs)$ mate .

(labs)$ ./manage.py runserver

Page 45: import antigravity

The End

Creative Commons Attribution-Noncommercial-Share Alike 3.0