Python Evolution
-
Upload
quintagroup -
Category
Technology
-
view
4.384 -
download
0
description
Transcript of Python Evolution
![Page 1: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/1.jpg)
Python Evolution2.4, 2.5, 2.6, 3.0by Myroslav Opyr, CTO
© Quintagroup 2008
![Page 2: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/2.jpg)
Contents
• Python 2.x featureso 2.4o 2.5o 2.6
• Why Python 3k?• Distribution as competitive benefit• References
![Page 3: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/3.jpg)
![Page 4: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/4.jpg)
![Page 5: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/5.jpg)
![Page 6: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/6.jpg)
![Page 7: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/7.jpg)
![Page 8: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/8.jpg)
![Page 9: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/9.jpg)
![Page 10: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/10.jpg)
![Page 11: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/11.jpg)
![Page 12: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/12.jpg)
![Page 13: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/13.jpg)
![Page 14: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/14.jpg)
![Page 15: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/15.jpg)
![Page 16: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/16.jpg)
![Page 17: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/17.jpg)
![Page 18: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/18.jpg)
![Page 19: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/19.jpg)
![Page 20: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/20.jpg)
Python 2.4 features
• built-in sets (PEP 218)• generator expressions (PEP 289)• new subprocess module (PEP 324)• function/method decorators (PEP 318)
![Page 21: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/21.jpg)
Python 2.5 features
• abstract syntax tree (AST)• 'with' statement (PEP 343)• absolute/relative imports (PEP 328)• distutils gained dependency info (PEP 314)• wsgiref package (PEP 333)• coroutines (PEP 342)
Non-features• PyPI accepts uploads• Continuous Integration with buildbot
![Page 22: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/22.jpg)
Python 2.6 features
• no more string exceptions• The "bytes" Object (PEP 358)• warnings for features to be removed in P3k• multiprocessing (PEP 371)• ast module• setuptools module• 2to3
Non-features• Python bugtracker moved to roundup
![Page 23: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/23.jpg)
Questions?
![Page 24: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/24.jpg)
pause...
![Page 25: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/25.jpg)
Python 3k/3000/3.0
• Incompatible changeso What Python 3.0 won't beo What Python 3.0 will be
• Release Plan• Migration process
o 2to3
![Page 26: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/26.jpg)
Python 3.0. Evolution philosophy
Joel on Software: Things You Should Never Do, Part I: Netscape was waiting so long between releases by making the
single worst strategic mistake that any software company can make:
They decided to rewrite the code from scratch.
http://www.joelonsoftware.com/articles/fog0000000069.html
![Page 27: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/27.jpg)
What Python 3.0 won't be
PEP-3099 highlights:• Python 3000 will not be case-insensitive• Python 3000 will not be a rewrite from scratch• self will not become implicit• lambda will not be renamed• No braces (from __future__ import braces)• Iterating over a dictionary will continue to yield the keys• The interpreter prompt (>>>) will not change. It gives Guido
warm fuzzy feelings
![Page 28: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/28.jpg)
What Python 3.0 will be
PEP-3000 Python 3.0 development guidelines:• PEP Numbering• Timeline• Compatibility and Transition• Implementation Language
PEP-3100 Python 3.0 implementation "reduce feature duplication by removing old ways of doing things.
A general principle of the design will be that one obvious way of doing something is enough."
![Page 29: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/29.jpg)
Python 3.0. Core language
• True division becomes default behavior• exec as a statement is not worth it -- make it a function• Add optional declarations for static typing (annotations)• Support only new-style classes; classic classes will be gone• Replace print by a function• The softspace attribute of files goes away.• Use except E1, E2, E3 as err: if you want the error variable.• None becomes a keyword; also True and False• as becomes a keyword• Comparisons other than == and != between disparate types will
raise an exception unless explicitly supported by the type
![Page 30: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/30.jpg)
Python 3.0. Core language (cont.)
• floats will not be acceptable as arguments in place of ints for operations where floats are inadvertantly accepted
• Remove from ... import * at function scope.• Imports
o Imports will be absolute by default.o Relative imports must be explicitly specified.
• Some expressions will require parentheses that didn't in 2.x: o List comprehensions will require parentheses around the
iterables. This will make list comprehensions more similar to generator comprehensions. [x for x in 1, 2] will need to be: [x for x in (1, 2)]
• Set literals and comprehensions. {x} means set([x]); {x, y} means set([x, y]).
![Page 31: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/31.jpg)
Python 3.0. Core language (cont.)
To be removed:• String exceptions: use instances of an Exception class• raise Exception, "message": use raise Exception("message")• `x`: use repr(x)• The <> operator: use != instead• Drop unbound methods• __getslice__, __setslice__, __delslice__; remove slice opcodes
and use slice objects.• __oct__, __hex__: use __index__ in oct() and hex() instead.• __methods__ and __members__
![Page 32: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/32.jpg)
Python 3.0. Atomic Types
• Remove distinction between int and long types; 'long' built-in type and literals with 'L' or 'l' suffix disappear
• Make all strings be Unicode, and have a separate bytes() type. The new string type will be called 'str'. See PEP 3137.
• Return iterable views instead of lists where appropriate for atomic type methods (e.g. dict.keys(), dict.values(), dict.items(), etc.); iter* methods will be removed.
To be removed:• file.xreadlines() method• dict.has_key() method; use in operator• list.sort() and builtin.sorted() methods: eliminate cmp parameter
![Page 33: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/33.jpg)
Python 3.0. Built-in Namespace
• Make built-ins return an iterator where appropriate (e.g. range(), zip(), map(), filter(), etc.)
• Remove input() and rename raw_input() to input(). If you need the old input(), use eval(input()).
• Introduce trunc(), which would call the __trunc__() method on its argument; suggested use is for objects like float where calling __int__() has data loss, but an integral representation is still desired
• Exception hierarchy changes• Add a bin() function for a binary representation of integers
![Page 34: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/34.jpg)
Python 3.0. Built-in Namespace (cont.)
To be removed:• apply(): use f(*args, **kw) instead• buffer(): must die (use a bytes() type instead)• callable(): just use hasattr(x, '__call__')• compile(): put in sys• coerce(): no longer needed• execfile(), reload(): use exec()• intern(): put in sys• reduce(): put in functools, a loop is more readable most of the
times• xrange(): use range()• StandardError: this is a relic from the original exception hierarchy;
subclass Exception instead.
![Page 35: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/35.jpg)
Python 3.0. Release Plan
PEP-361: Python 2.6 and 3.0 are lock-stepped (the same procedure was used for 1.6 and 2.0):• Feb 29 2008: Python 2.6a1 and 3.0a3 are released• Apr 02 2008: Python 2.6a2 and 3.0a4 are released• May 08 2008: Python 2.6a3 and 3.0a5 are released• Jun 18 2008: Python 2.6b1 and 3.0b1 are released• Jul 02 2008: Python 2.6b2 and 3.0b2 planned• Aug 06 2008: Python 2.6rc1 and 3.0rc1 planned• Aug 20 2008: Python 2.6rc2 and 3.0rc2 planned• Sep 03 2008: Python 2.6 and 3.0 final
![Page 36: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/36.jpg)
Python 3.0. Migration
Python 3.0 will break backwards compatibility with Python 2.x.There is no requirement that Python 2.6 code will run unmodified on Python 3.0. Not even a subset.Python 2.6 will support forward compatibility in the following two ways:• It will support a "Py3k warnings mode" which will warn dynamically (i.e.
at runtime) about features that will stop working in Python 3.0, e.g. assuming that range() returns a list.
• It will contain backported versions of many Py3k features, either enabled through __future__ statements or simply by allowing old and new syntax to be used side-by-side (if the new syntax would be a syntax error in 2.x).
![Page 37: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/37.jpg)
Python 3.0. Migration (cont.)
The recommended development model for a project that needs to support Python 2.6 and 3.0 simultaneously is as follows:1. You should have excellent unit tests with close to full coverage.– Port your project to Python 2.6.– Turn on the Py3k warnings mode.– Test and edit until no warnings remain.– Use the 2to3 tool to convert this source code to 3.0 syntax. Do not manually edit the
output!– Test the converted source code under 3.0.– If problems are found, make corrections to the 2.6 version of the source code and go
back to step 3.– When it's time to release, release separate 2.6 and 3.0 tarballs (or whatever archive
form you use for releases).It is recommended not to edit the 3.0 source code until you are ready to reduce 2.6 support to pure maintenance (i.e. the moment when you would normally move the 2.6 code to a maintenance branch anyway).
![Page 38: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/38.jpg)
Python 3.0. Questions?
![Page 39: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/39.jpg)
pause...
![Page 40: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/40.jpg)
Distributing Python code
• Why distribution is important?• distutils• setuptools• easy_install• virtualenv• Private PyPI
![Page 41: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/41.jpg)
Why distribution is important?
• Simpler installation makes Python software reusable andmore accessible
• More users• More pressure to package developers• Better distributions
o more meta-datao more documentationo more testso more platforms
• "CheeseCake" rating system (better package kwalitee)
![Page 42: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/42.jpg)
distutils
For end-users: python setup.py install
For developers: python setup.py sdist
For packagers: python setup.py bdist
Since Python-2.5, you can host your packages directly on PyPI python setup.py upload
![Page 43: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/43.jpg)
setuptools
• Automatically find/download/install/upgrade dependencies at build time using the EasyInstall tool, which supports downloading via HTTP, FTP, Subversion, and SourceForge, and automatically scans web pages linked from PyPI to find download links. (It's the closest thing to CPAN currently available for Python.)
easy_install grockproject
• Create Python Eggs - a single-file importable distribution format python setup.py bdist_egg
![Page 44: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/44.jpg)
setuptools (cont.)
• Command aliases - create project-specific, per-user, or site-wide shortcut names for commonly used commands and options
• PyPI upload support - upload your source distributions and eggs to PyPI• Deploy your project in "development mode", such that it's available on sys.path, yet
can still be edited directly from its source checkout.• Easily extend the distutils with new commands or setup() arguments, and
distribute/reuse your extensions for multiple projects, without copying code.• Create extensible applications and frameworks that automatically discover
extensions, using simple "entry points" declared in a project's setup script.
![Page 45: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/45.jpg)
easy_install
easy_install SQLObject
easy_install -f http://pythonpaste.org/package_index.html SQLObject
easy_install http://example.com/path/to/MyPackage-1.2.3.tgz
easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg
easy_install --upgrade PyProtocols
easy_install .
easy_install --editable --build-directory ~/projects SQLObject
![Page 46: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/46.jpg)
virtualenv
virtualenv is a tool to create isolated Python environments. The basic usage is: $ python virtualenv.py ENV
This creates ENV/lib/python2.4/site-packages , where anylibraries you install will go. It also creates ENV/bin/python,which is a Python interpreter that uses this environment.
Allows bootstrap scripts that prepare environment.
Alternatives:• workingenv• virtual-python• zc.buildout
![Page 47: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/47.jpg)
Private PyPI
Folder...with eggs exposed (and password-protected) via Apache. Works with easy_install, requires "manual" uploading to folder, can be as simple as copy to shared folder
haufe.eggservergrok-powered solution. Recently upload support added. No dedicated security model (everyone is trusted and allowed to upload packages).Plone Software Center 1.5Plone product. Support upload, categorization, security. Has buildout.
![Page 48: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/48.jpg)
Questions?
![Page 49: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/49.jpg)
References
• http://www.python.org/download/releases/2.4/highlights/• http://www.python.org/download/releases/2.5/highlights/• http://www.joelonsoftware.com/articles/fog0000000069.html• http://www.python.org/dev/peps/pep-0361/• http://www.python.org/dev/peps/pep-3000/• http://www.python.org/dev/peps/pep-3099/• http://www.python.org/dev/peps/pep-3100/• http://www.python.org/download/releases/3.0/• http://mail.python.org/pipermail/python-dev/2006-April/064145.html• http://www.python.org/doc/current/inst/inst.html• http://docs.python.org/dist/dist.html• http://pypi.python.org/pypi/setuptools/• http://peak.telecommunity.com/DevCenter/setuptools• http://pypi.python.org/pypi/virtualenv• http://pypi.python.org/pypi/haufe.eggserver/• http://tarekziade.wordpress.com/2008/03/20/how-to-run-your-own-private-pypi-cheeseshop-se
rver/
![Page 50: Python Evolution](https://reader035.fdocuments.us/reader035/viewer/2022062513/554ebe30b4c905064d8b4742/html5/thumbnails/50.jpg)
Thanks
http://sites.google.com/a/quintagroup.com/techtalks/Topics/python-evolution