This is Python version 3.0 alpha 2
==================================

For notes specific to this release, see RELNOTES in this directory.

Python 3000 (a.k.a. "Py3k", and released as Python 3.0) is a new
version of the language, which is incompatible with the 2.x line of
releases.  The language is mostly the same, but many details,
especially how built-in objects like dictionaries and strings work,
have changed considerably, and a lot of deprecated features have
finally been removed.

This is an ongoing project; the cleanup isn't expected to be complete
until some time in 2008.  In particular there are plans to reorganize
the standard library namespace.


Release Schedule
----------------

The release plan is to have a series of alpha releases in 2007, beta
releases in 2008, and a final release in August 2008.  The alpha
releases are primarily aimed at developers who want a sneak peek at
the new langauge, especially those folks who plan to port their code
to Python 3000.  The hope is that by the time of the final release,
many 3rd party packages will already be available in a 3.0-compatible
form.


Documentation
-------------

Documentation for Python 3000 is online, updated twice a day:

    http://docs.python.org/dev/3.0/

This is a work in progress; please help improve it!

The design documents for Python 3000 are also online.  While the
reference documentation is being updated, the PEPs are often the best
source of information about new features.  Start by reading PEP 3000:

    http://python.org/dev/peps/pep-3000/


What's New
----------

For an overview of what's new in Python 3000, see Guido van Rossum's
blog at artima.com:

    http://www.artima.com/weblogs/index.jsp?blogger=guido

We'll eventually have a comprehensive overview of the changes in a
"What's New in Python 3.0" document.  Please help write it!


What's New Since 3.0a1
----------------------

Undoubtedly the biggest change is in the bytes type: 'bytes' is now
immutable, and there is a new mutable bytes type 'bytearray'.  These
two types are interoperable in every way.  For more info on this
issue, read PEP 3137.

For a more detailed change log, read Misc/NEWS (though this file, too,
is incomplete, and also doesn't list anything merged in from the 2.6
release under development).


Converting From Python 2.x to 3.0
---------------------------------

Python 2.6 (not yet released) will contain features to help locating
code that needs to be changed, such as optional warnings when
deprecated features are used, and backported versions of certain key
Python 3000 features.

A source-to-source translation tool, "2to3", can take care of the
mundane task of converting large amounts of source code.  It is not a
complete solution but is complemented by the deprecation warnings in
2.6.  This tool is currently available via the Subversion sandbox:

    http://svn.python.org/view/sandbox/trunk/2to3/


Issue Tracker and Mailing List
------------------------------

We're soliciting bug reports about all aspects of the language.  Fixes
are also welcome, preferable in unified diff format.  Please use the
issue tracker:

    http://bugs.python.org/

If you're not sure whether you're dealing with a bug or a feature, use
the mailing list:

    python-3000@python.org

To subscribe to the list, use the mailman form:

    http://mail.python.org/mailman/listinfo/python-3000/


Build Instructions
------------------

On Unix, Linux, BSD, OSX, and Cygwin:

    ./configure
    make
    make test
    sudo make install    # or "make altinstall"

You can pass many options to the configure script; run "./configure
--help" to find out more.  On OSX and Cygwin, the executable is called
python.exe; elsewhere it's just python.

On Mac OS X, if you have configured Python with --enable-framework,
you should use "make frameworkinstall" to do the installation.  Note
that this installs the Python executable in a place that is not
normally on your PATH, you may want to set up a symlink in
/usr/local/bin.

On Windows, see PCbuild/readme.txt.

If you wish, you can create a subdirectory and invoke configure from
there.  For example:

    mkdir debug
    cd debug
    ../configure --with-pydebug
    make
    make test

(This will fail if you *also* built at the top-level directory.  You
should do a "make clean" at the toplevel first.)


Copyright and License Information
---------------------------------

Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 
Python Software Foundation.
All rights reserved.

Copyright (c) 2000 BeOpen.com.
All rights reserved.

Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All rights reserved.

Copyright (c) 1991-1995 Stichting Mathematisch Centrum.
All rights reserved.

See the file "LICENSE" for information on the history of this
software, terms & conditions for usage, and a DISCLAIMER OF ALL
WARRANTIES.

This Python distribution contains *no* GNU General Public License
(GPL) code, so it may be used in proprietary projects.  There are
interfaces to some GNU code but these are entirely optional.

All trademarks referenced herein are property of their respective
holders.
