diff options
Diffstat (limited to 'FOSS/Python/Dependencies/future-0.18.2/docs/faq.rst')
| -rw-r--r-- | FOSS/Python/Dependencies/future-0.18.2/docs/faq.rst | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/FOSS/Python/Dependencies/future-0.18.2/docs/faq.rst b/FOSS/Python/Dependencies/future-0.18.2/docs/faq.rst new file mode 100644 index 0000000..9b1eab0 --- /dev/null +++ b/FOSS/Python/Dependencies/future-0.18.2/docs/faq.rst @@ -0,0 +1,310 @@ +Frequently Asked Questions (FAQ) +******************************** + +Who is this for? +================ + +1. People with existing or new Python 3 codebases who wish to provide +ongoing Python 2.7 support easily and with little maintenance burden. + +2. People who wish to ease and accelerate migration of their Python 2 codebases +to Python 3.4+, module by module, without giving up Python 2 compatibility. + + +Why upgrade to Python 3? +======================== + +.. epigraph:: + + "Python 2 is the next COBOL." + + -- Alex Gaynor, at PyCon AU 2013 + +Python 2.7 is the end of the Python 2 line. (See `PEP 404 +<http://www.python.org/peps/pep-0404/>`_.) The language and standard +libraries are improving only in Python 3.x. + +Python 3.x is a better language and better set of standard libraries than +Python 2.x in many ways. Python 3.x is cleaner, less warty, and easier to +learn than Python 2. It has better memory efficiency, easier Unicode handling, +and powerful new features like the `asyncio +<https://docs.python.org/3/library/asyncio.html>`_ module. + +.. Unicode handling is also much easier. For example, see `this page +.. <http://pythonhosted.org/kitchen/unicode-frustrations.html>`_ +.. describing some of the problems with handling Unicode on Python 2 that +.. Python 3 mostly solves. + + +Porting philosophy +================== + +Why write Python 3-style code? +------------------------------ + +Here are some quotes: + +- "Django's developers have found that attempting to write Python 3 code + that's compatible with Python 2 is much more rewarding than the + opposite." from the `Django docs + <https://docs.djangoproject.com/en/dev/topics/python3/>`_. + +- "Thanks to Python 3 being more strict about things than Python 2 (e.g., + bytes vs. strings), the source translation [from Python 3 to 2] can be + easier and more straightforward than from Python 2 to 3. Plus it gives + you more direct experience developing in Python 3 which, since it is + the future of Python, is a good thing long-term." from the official + guide `"Porting Python 2 Code to Python 3" + <http://docs.python.org/2/howto/pyporting.html>`_ by Brett Cannon. + +- "Developer energy should be reserved for addressing real technical + difficulties associated with the Python 3 transition (like + distinguishing their 8-bit text strings from their binary data). They + shouldn't be punished with additional code changes ..." from `PEP 414 + <http://www.python.org/dev/peps/pep-0414/>`_ by Armin Ronacher and Nick + Coghlan. + + +Can't I just roll my own Py2/3 compatibility layer? +--------------------------------------------------- + +Yes, but using ``python-future`` will probably be easier and lead to cleaner +code with fewer bugs. + +Consider this quote: + +.. epigraph:: + + "Duplication of effort is wasteful, and replacing the various + home-grown approaches with a standard feature usually ends up making + things more readable, and interoperable as well." + + -- Guido van Rossum (`blog post <http://www.artima.com/weblogs/viewpost.jsp?thread=86641>`_) + + +``future`` also includes various Py2/3 compatibility tools in +:mod:`future.utils` picked from large projects (including IPython, +Django, Jinja2, Pandas), which should reduce the burden on every project to +roll its own py3k compatibility wrapper module. + + +What inspired this project? +--------------------------- + +In our Python training courses, we at `Python Charmers +<http://pythoncharmers.com>`_ faced a dilemma: teach people Python 3, which was +future-proof but not as useful to them today because of weaker 3rd-party +package support, or teach people Python 2, which was more useful today but +would require them to change their code and unlearn various habits soon. We +searched for ways to avoid polluting the world with more deprecated code, but +didn't find a good way. + +Also, in attempting to help with porting packages such as `scikit-learn +<http://scikit-learn.org>`_ to Python 3, I (Ed) was dissatisfied with how much +code cruft was necessary to introduce to support Python 2 and 3 from a single +codebase (the preferred porting option). Since backward-compatibility with +Python 2 may be necessary for at least the next 5 years, one of the promised +benefits of Python 3 -- cleaner code with fewer of Python 2's warts -- was +difficult to realize before in practice in a single codebase that supported +both platforms. + +The goal is to accelerate the uptake of Python 3 and help the strong Python +community to remain united around a single version of the language. + + +Maturity +======== + +How well has it been tested? +---------------------------- + +``future`` is used by several major projects, including `mezzanine +<http://mezzanine.jupo.org>`_ and `ObsPy <http://www.obspy.org>`_. It is also +currently being used to help with porting 800,000 lines of Python 2 code in +`Sage <http://sagemath.org>`_ to Python 2/3. + +Currently ``python-future`` has over 1000 unit tests. Many of these are straight +from the Python 3.3 and 3.4 test suites. + +In general, the ``future`` package itself is in good shape, whereas the +``futurize`` script for automatic porting is imperfect; chances are it will +require some manual cleanup afterwards. The ``past`` package also needs to be +expanded. + + +Is the API stable? +------------------ + +Not yet; ``future`` is still in beta. Where possible, we will try not to break +anything which was documented and used to work. After version 1.0 is released, +the API will not change in backward-incompatible ways until a hypothetical +version 2.0. + +.. + Are there any example of Python 2 packages ported to Python 3 using ``future`` and ``futurize``? + ------------------------------------------------------------------------------------------------ + + Yes, an example is the port of ``xlwt``, available `here + <https://github.com/python-excel/xlwt/pull/32>`_. + + The code also contains backports for several Py3 standard library + modules under ``future/standard_library/``. + + +Relationship between python-future and other compatibility tools +================================================================ + +How does this relate to ``2to3``? +--------------------------------- + +``2to3`` is a powerful and flexible tool that can produce different +styles of Python 3 code. It is, however, primarily designed for one-way +porting efforts, for projects that can leave behind Python 2 support. + +The example at the top of the `2to3 docs +<http://docs.python.org/2/library/2to3.html>`_ demonstrates this. After +transformation by ``2to3``, ``example.py`` looks like this:: + + def greet(name): + print("Hello, {0}!".format(name)) + print("What's your name?") + name = input() + greet(name) + +This is Python 3 code that, although syntactically valid on Python 2, +is semantically incorrect. On Python 2, it raises an exception for +most inputs; worse, it allows arbitrary code execution by the user +for specially crafted inputs because of the ``eval()`` executed by Python +2's ``input()`` function. + +This is not an isolated example; almost every output of ``2to3`` will need +modification to provide backward compatibility with Python 2. As an +alternative, the ``python-future`` project provides a script called +``futurize`` that is based on ``lib2to3`` but will produce code that is +compatible with both platforms (Py2 and Py3). + + +Can I maintain a Python 2 codebase and use 2to3 to automatically convert to Python 3 in the setup script? +--------------------------------------------------------------------------------------------------------- + +This was originally the approach recommended by Python's core developers, +but it has some large drawbacks: + +1. First, your actual working codebase will be stuck with Python 2's +warts and smaller feature set for as long as you need to retain Python 2 +compatibility. This may be at least 5 years for many projects, possibly +much longer. + +2. Second, this approach carries the significant disadvantage that you +cannot apply patches submitted by Python 3 users against the +auto-generated Python 3 code. (See `this talk +<http://www.youtube.com/watch?v=xNZ4OVO2Z_E>`_ by Jacob Kaplan-Moss.) + + +What is the relationship between ``future`` and ``six``? +-------------------------------------------------------- + +``python-future`` is a higher-level compatibility layer than ``six`` that +includes more backported functionality from Python 3, more forward-ported +functionality from Python 2, and supports cleaner code, but requires more +modern Python versions to run. + +``python-future`` and ``six`` share the same goal of making it possible to write +a single-source codebase that works on both Python 2 and Python 3. +``python-future`` has the further goal of allowing standard Py3 code to run with +almost no modification on both Py3 and Py2. ``future`` provides a more +complete set of support for Python 3's features, including backports of +Python 3 builtins such as the ``bytes`` object (which is very different +to Python 2's ``str`` object) and several standard library modules. + +``python-future`` supports only Python 2.7+ and Python 3.4+, whereas ``six`` +supports all versions of Python from 2.4 onwards. (See +:ref:`supported-versions`.) If you must support older Python versions, +``six`` will be essential for you. However, beware that maintaining +single-source compatibility with older Python versions is ugly and `not +fun <http://lucumr.pocoo.org/2013/5/21/porting-to-python-3-redux/>`_. + +If you can drop support for older Python versions, ``python-future`` leverages +some important features introduced into Python 2.7, such as +import hooks, and a comprehensive and well-tested set of backported +functionality, to allow you to write more idiomatic, maintainable code with +fewer compatibility hacks. + + +What is the relationship between ``python-future`` and ``python-modernize``? +---------------------------------------------------------------------------- + +``python-future`` contains, in addition to the ``future`` compatibility +package, a ``futurize`` script that is similar to ``python-modernize.py`` +in intent and design. Both are based heavily on ``2to3``. + +Whereas ``python-modernize`` converts Py2 code into a common subset of +Python 2 and 3, with ``six`` as a run-time dependency, ``futurize`` +converts either Py2 or Py3 code into (almost) standard Python 3 code, +with ``future`` as a run-time dependency. + +Because ``future`` provides more backported Py3 behaviours from ``six``, +the code resulting from ``futurize`` is more likely to work +identically on both Py3 and Py2 with less additional manual porting +effort. + + +Platform and version support +============================ + +.. _supported-versions: + +Which versions of Python does ``python-future`` support? +-------------------------------------------------------- + +Python 2.7, and 3.4+ only. + +Python 2.7 introduced many important forward-compatibility +features (such as import hooks, ``b'...'`` literals and ``__future__`` +definitions) that greatly reduce the maintenance burden for single-source +Py2/3 compatible code. ``future`` leverages these features and aims to +close the remaining gap between Python 3 and 2.7. + + +Do you support Pypy? +~~~~~~~~~~~~~~~~~~~~ + +Yes, except for the standard library import hooks (currently). Feedback +and pull requests are welcome! + + +Do you support IronPython and/or Jython? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Not sure. This would be nice... + + +.. _support: + +Support +======= + +Is there a mailing list? +------------------------ + +Yes, please ask any questions on the `python-porting +<https://mail.python.org/mailman/listinfo/python-porting>`_ mailing list. + + +.. _contributing: + +Contributing +============ + +Can I help? +----------- + +Yes please :) We welcome bug reports, additional tests, pull requests, +and stories of either success or failure with using it. Help with the fixers +for the ``futurize`` script is particularly welcome. + + +Where is the repo? +------------------ + +`<https://github.com/PythonCharmers/python-future>`_. |
