This is Python version 3.0 alpha 1
==================================

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 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!


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.
