123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- # coding=utf-8
- """
- past: compatibility with Python 2 from Python 3
- ===============================================
- ``past`` is a package to aid with Python 2/3 compatibility. Whereas ``future``
- contains backports of Python 3 constructs to Python 2, ``past`` provides
- implementations of some Python 2 constructs in Python 3 and tools to import and
- run Python 2 code in Python 3. It is intended to be used sparingly, as a way of
- running old Python 2 code from Python 3 until the code is ported properly.
- Potential uses for libraries:
- - as a step in porting a Python 2 codebase to Python 3 (e.g. with the ``futurize`` script)
- - to provide Python 3 support for previously Python 2-only libraries with the
- same APIs as on Python 2 -- particularly with regard to 8-bit strings (the
- ``past.builtins.str`` type).
- - to aid in providing minimal-effort Python 3 support for applications using
- libraries that do not yet wish to upgrade their code properly to Python 3, or
- wish to upgrade it gradually to Python 3 style.
- Here are some code examples that run identically on Python 3 and 2::
- >>> from past.builtins import str as oldstr
- >>> philosopher = oldstr(u'\u5b54\u5b50'.encode('utf-8'))
- >>> # This now behaves like a Py2 byte-string on both Py2 and Py3.
- >>> # For example, indexing returns a Python 2-like string object, not
- >>> # an integer:
- >>> philosopher[0]
- '\xe5'
- >>> type(philosopher[0])
- <past.builtins.oldstr>
- >>> # List-producing versions of range, reduce, map, filter
- >>> from past.builtins import range, reduce
- >>> range(10)
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- >>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
- 15
- >>> # Other functions removed in Python 3 are resurrected ...
- >>> from past.builtins import execfile
- >>> execfile('myfile.py')
- >>> from past.builtins import raw_input
- >>> name = raw_input('What is your name? ')
- What is your name? [cursor]
- >>> from past.builtins import reload
- >>> reload(mymodule) # equivalent to imp.reload(mymodule) in Python 3
- >>> from past.builtins import xrange
- >>> for i in xrange(10):
- ... pass
- It also provides import hooks so you can import and use Python 2 modules like
- this::
- $ python3
- >>> from past.translation import autotranslate
- >>> authotranslate('mypy2module')
- >>> import mypy2module
- until the authors of the Python 2 modules have upgraded their code. Then, for
- example::
- >>> mypy2module.func_taking_py2_string(oldstr(b'abcd'))
- Credits
- -------
- :Author: Ed Schofield, Jordan M. Adler, et al
- :Sponsor: Python Charmers: https://pythoncharmers.com
- Licensing
- ---------
- Copyright 2013-2024 Python Charmers, Australia.
- The software is distributed under an MIT licence. See LICENSE.txt.
- """
- from future import __version__, __copyright__, __license__
- __title__ = 'past'
- __author__ = 'Ed Schofield'
|