This is Python release 1.4 (final)
==================================

I appreciate everybody's patience...  This is the official, final
release of Python 1.4.  You can throw away your copies of 1.3 and the
1.4 betas now!


What's new in this release?
---------------------------

An exhaustive list of (nearly) everything that changed since the
release of Python 1.3, over a year ago, can be found in the file
Misc/NEWS.  (A history of all changes before that time is kept in
Misc/HISTORY.)  An overview of the most important user-visible changes
is appended as a new chapter to the Tutorial (Doc/tut.tex).  Perhaps
the most visible changes are the new power operator, complex numbers,
new slicing and indexing syntax, and class-private names of the form
__spam (an experimental feature).


What is Python anyway?
----------------------

Python is an interpreted object-oriented programming language, and is
often compared to Tcl, Perl, Scheme or Java.  For a quick summary of
what Python can mean for a UNIX/C programmer, read Misc/BLURB.LUTZ.
If you have web access, point your browser to http://www.python.org.


How do I learn Python?
----------------------

The official tutorial is still a good place to start (in the Doc
directory as tut.tex; and http://www.python.org/doc/tut/tut.html).
Aaron Watters wrote a second tutorial, that may be more accessible for
some: http://www.wcmh.com/uworld/archives/95/tutorial/005.html.

There are now also two books on Python.  While these are still based
on Python 1.3 or 1.4beta2, the language is so stable now that you'd be
hard pressed to find places where the books are out of date.  The
books, both first published in October 1996 and both including a
CD-ROM, form excellent companions to each other:

	Internet Programming with Python
	by Aaron Watters, Guido van Rossum, and James Ahlstrom
	MIS Press/Henry Holt publishers
	ISBN: 1-55851-484-8

	Programming Python
	by Mark Lutz
	O'Reilly & Associates
	ISBN: 1-56592-197-6


If you don't read instructions
------------------------------

Congratulations on getting this far. :-)

To start building right away (on UNIX): type "./configure" in the
current directory and when it finishes, type "make".  The section
Build Instructions below is still recommended reading. :-)


Copyright issues
----------------

Python is COPYRIGHTED but free to use for all.  See the full copyright
notice at the end of this file.

The Python distribution is *not* affected by the GNU Public Licence
(GPL).  There are interfaces to some GNU code but these are entirely
optional and no GNU code is distributed with Python.  For all these
packages, GPL-free public domain versions also exist.



A modest plug
=============

*********************************************************************
* Without your help, I won't be able to continue to support Python! *
*********************************************************************

If you use Python, please consider joining the Python Software
Activity (PSA).  See http://www.python.org/psa/.

Organizations that make heavy use of Python are especially encouraged
to become corporate members!


Build instructions
==================

Before you can build Python, you must first configure it.
Fortunately, the configuration and build process has been streamlined
for most Unix installations, so all you have to do is type a few
commands, optionally edit one file, and sit back.  There are some
platforms where things are not quite as smooth; see the platform
specific notes below.  If you want to build for multiple platforms
sharing the same source tree, see the section on VPATH below.

You start by running the script "./configure", which figures out your
system configuration and creates several Makefiles.  (It takes a
minute or two -- please be patient!)  When it's done, you are ready to
run make.  You may want to pass options to the configure script -- see
the section below on configuration options and variables.

To build Python, you normally type "make" in the toplevel directory.
This will recursively run make in each of the subdirectories Parser,
Objects, Python and Modules, creating a library file in each one.  The
executable of the interpreter is built in the Modules subdirectory and
moved up here when it is built.  If you want or need to, you can also
chdir into each subdirectory in turn and run make there manually (do
the Modules subdirectory last!).

Once you have built an interpreter, see the subsections below on
testing, configuring additional modules, and installation.  If you run
in trouble, see the next section.


Troubleshooting
---------------

See also the platform specific notes in the next section.

If recursive makes fail, try invoking make as "make MAKE=make".

If you run into other trouble, see section 3 of the FAQ (file
Misc/FAQ) for hints on what can go wrong, and how to fix it.

If you rerun the configure script with different options, remove all
object files by running "make clean" before rebuilding.  Believe it or
not, "make clean" sometimes helps to clean up other inexplicable
problems as well.  Try it before sending in a bug report!

If the configure script fails or doesn't seem to find things that
should be there, inspect the config.log file.


Platform specific notes
-----------------------

(Some of these may no longer apply.  If you find you can build Python
on these platforms without the special directions mentioned here, let
me know so I can remove them!)

Solaris: When using Sun's C compiler with threads, at least on Solaris
	2.5.1, you need to add the "-mt" compiler option (the simplest
	way is probably to specify the compiler with this option as
	the "CC" environment variable when running the configure
	script).

Linux:  On Linux version 1.x, once you've built Python, use it to run
	the regen script in the Lib/linux1 directory.  Apparently
	the files as distributed don't match the system headers on
	some Linux versions.  (The "h2py" command refers to
	Tools/scripts/h2py.py.)  The modules distributed for Linux 2.x
	should be okay.  Shared library support now works by default
	on ELF-based x86 Linux systems.  (Note: when you change the
	status of a module from static to shared, you must remove its
	.o file or do a "make clean".)

DEC Alpha OFS/1: When enabling threads, use --with-dec-threads, not
	--with-thread.

AIX:	A complete overhaul of the shared library support is now in
	place.  To enable it, uncomment the LINKCC line in the Setup
	file.  See Misc/AIX-NOTES for some notes on how it's done.

	WARNING!  In some versions of AIX 3.x, you get errors about
	Invalid Indent when running the Python test set.  This appears
	to be a bug in the AIX compiler.  Rebuild Parser/tokenizer.c
	using OPT="" or OPT=-g, or use gcc.

HP-UX:	Shared library support now works by default (at least on HP-UX
	9.x).  One other problem remains: the HP ANSI C compiler (cc
	-Aa) is too pedantic to use, but in K&R mode, it barfs on a
	few files (complexobject.c, getargs.c and operator.c).  Until
	this is fixed, the following seems to work:

		make -k		# this compiles all but a few files
		make OPT=-Aa	# compile the remaining files

Minix:  When using ack, use "CC=cc AR=aal RANLIB=: ./configure"!

SCO:    1) Everything works much better if you add -U__STDC__ to the
	defs.  This is because all the SCO header files are broken.
	Anything that isn't mentioned in the C standard it's
	conditionally excluded when __STDC__ is defined.

	2) Due to the U.S. export restrictions, SCO broke the crypt
	stuff out into a separate library, libcrypt_i.a so the LIBS
	needed be set to:

		LIBS=' -lsocket -lcrypt_i'

	3) According to at least one report, the above apply only to
	SCO 3 -- Python builds out of the box on SCO 5.

SunOS:	On SunOS 4.1.x, when using the SunPro C compiler, you may want
	to use the '-Xa' option instead of '-Xc', to enable some
	needed non-ANSI Sunisms.

NeXT:   To build fat binaries, use the --with-next-archs switch
	described below.


Configuring additional built-in modules
---------------------------------------

You can configure the interpreter to contain fewer or more built-in
modules by editing the file Modules/Setup.  This file is initially
copied (when the toplevel Makefile makes Modules/Makefile for the
first time) from Setup.in; if it does not exist yet, make a copy
yourself.  Never edit Setup.in -- always edit Setup.  Read the
comments in the file for information on what kind of edits you can
make.  When you have edited Setup, Makefile and config.c in Modules
will automatically be rebuilt the next time you run make in the
toplevel directory.  (When working inside the Modules directory, use
"make Makefile; make".)

The default collection of modules should build on any Unix system, but
many optional modules should work on all modern Unices (e.g. try dbm,
nis, termios, timing, syslog, curses, new, soundex, parser).  Often
the quickest way to determine whether a particular module works or not
is to see if it will build: enable it in Setup, then if you get
compilation or link errors, disable it -- you're missing support.

On SGI IRIX, there are modules that interface to many SGI specific
system libraries, e.g. the GL library and the audio hardware.

For SunOS and Solaris, enable module "sunaudiodev" to support the
audio device.

In addition to the file Setup, you can also edit the file Setup.local.
(the makesetup script processes both).  You may find it more
convenient to edit Setup.local and leave Setup alone.  Then, when
installing a new Python version, you can copy your old Setup.local
file.


Setting the optimization/debugging options
------------------------------------------

If you want or need to change the optimization/debugging options for
the C compiler, assign to the OPT variable on the toplevel make
command; e.g. "make OPT=-g" will build a debugging version of Python
on most platforms.  The default is OPT=-O; a value for OPT in the
environment when the configure script is run overrides this default
(likewise for CC; and the initial value for LIBS is used as the base
set of libraries to link with).


Testing
-------

To test the interpreter that you have just built, type "make test".
This runs the test set silently, twice (once with no compiled files,
once with the compiled files left by the previous test run).  Each
test run should print "All tests OK." and nothing more.  (The test set
does not test the built-in modules, but will find most other problems
with the interpreter.)

IMPORTANT: If the tests fail and you decide to mail a bug report,
*don't* include the output of "make test".  It is useless.  Run the
following command instead:

    PYTHONPATH=../Lib:../Lib/test:./Modules ./python -c 'import testall'

(substituting the top of the source tree for .. if you built in a
different directory).  This gives the output of the tests and shows
which test failed.


Installing
----------

Installing Python was never this easy!

To install the Python binary, library modules, shared library modules
(see below), include files, configuration files, and the manual page,
just type "make install".  This will install all platform-independent
files in subdirectories the directory given with the --prefix option
to configure or the 'prefix' Make variable (default /usr/local), and
all binary and other platform-specific files in subdirectories if the
directory given by --exec-prefix or the 'exec_prefix' Make variable
(defaults to the --prefix directory).  All subdirectories created will
have Python's version number in their name, e.g. the library modules
are installed in "/usr/local/lib/python1.4/" by default.  The Python
binary is installed as "python1.4" and a hard link named "python" is
created.  The only file not installed with a version number in its
name is the manual page, installed as "/usr/local/man/man1/python.1"
by default.

If you have a previous installation of a pre-1.4 Python that you don't
want to replace yet, use "make altinstall".  This installs the same
set of files as "make install" except it doesn't create the hard link
to "python1.4" named "python" and it doesn't install the manual page
at all.

The only thing you may have to install manually is the Python mode for
Emacs.  (But then again, more recent versions of Emacs may already
have it!)  This is the file Misc/python-mode.el; follow the
instructions that came with Emacs for installation of site specific
files.


Configuration options and variables
-----------------------------------

Some special cases are handled by passing options to the configure
script.

WARNING: if you rerun the configure script with different options, you
must run "make clean" before rebuilding.  Exceptions to this rule:
after changing --prefix or --exec-prefix, all you need to do is remove
Modules/getpath.o; after changing --with-readline, just remove
Parser/myreadline.o (but if it doesn't seem to work, always try "make
clean" before giving up or complaining!).

--with(out)-gcc: The configure script uses gcc (the GNU C compiler) if
	it finds it.  If you don't want this, or if this compiler is
	installed but broken on your platform, pass the option
	--without-gcc.  You can also pass "CC=cc" (or whatever the
	name of the proper C compiler is) in the environment, but the
	advantage of using --without-gcc is that this option is
	remembered by the config.status script for its --recheck
	option.

--prefix, --exec-prefix: If you want to install the binaries and the
	Python library somewhere else than in /usr/local/{bin,lib},
	you can pass the option --prefix=DIRECTORY; the interpreter
	binary will be installed as DIRECTORY/bin/python and the
	library files as DIRECTORY/lib/python/*.  If you pass
	--exec-prefix=DIRECTORY (as well) this overrides the
	installation prefix for architecture-dependent files (like the
	interpreter binary).  Note that --prefix=DIRECTORY also
	affects the default module search path (sys.path), when
	Modules/config.c is compiled.  Passing make the option
	prefix=DIRECTORY (and/or exec_prefix=DIRECTORY) overrides the
	prefix set at configuration time; this may be more convenient
	than re-running the configure script if you change your mind
	about the install prefix...

--with-readline: You can use the GNU readline library to improve the
	interactive user interface.  This gives you line editing and
	command history when calling Python interactively.  Unless GNU
	readline is a standard part of your system (it is on Linux),
	you need to configure build the GNU readline library before
	running the configure script.  Its sources are not distributed
	with Python; you can ftp them from any GNU mirror site, or
	from its home site:
	ftp://slc2.ins.cwru.edu/pub/dist/readline-2.0.tar.gz (or
	a higher version number -- using version 1.x is not
	recommended).

	A GPL-free version was posted to comp.sources.misc in volume
	31 and is widely available from FTP archive sites, e.g.
	ftp://gatekeeper.dec.com/.

	Pass the Python configure script the option
	--with-readline=DIRECTORY where DIRECTORY is the absolute
	pathname of the directory where you've built the readline
	library.  If GNU readline is a standard part of your system,
	don't pass '=DIRECTORY'.  Some hints on building and using the
	readline library are in the FAQ (file Misc/FAQ).

--with-thread: On most Unix systems, you can now use multiple threads.
	To enable this, pass --with-thread.  (--with-threads is an
	alias.)  If the library required for threads lives in a
	peculiar place, you can use --with-thread=DIRECTORY.  In the
	Modules/Setup file, enable the thread module.  (Threads aren't
	enabled automatically because there are run-time penalties
	when support for them is compiled in even if you don't use
	them.)  IMPORTANT: run "make clean" after changing (either
	enabling or disabling) this option!  Note: for DEC Alpha OSF/1,
	use --with-dec-threads instead.

--with-sgi-dl: On SGI IRIX 4, dynamic loading of extension modules is
	supported by the "dl" library by Jack Jansen, which is
	ftp'able from ftp://ftp.cwi.nl/pub/dynload/dl-1.6.tar.Z.
	This is enabled (after you've ftp'ed and compiled the dl
	library!) by passing --with-sgi-dl=DIRECTORY where DIRECTORY
	is the absolute pathname of the dl library.  (Don't bother on
	IRIX 5, it already has dynamic linking using SunOS style
	shared libraries.)  Support for this feature is deprecated.

--with-dl-dld: Dynamic loading of modules is rumoured to be supported
	on some other systems: VAX (Ultrix), Sun3 (SunOS 3.4), Sequent
	Symmetry (Dynix), and Atari ST.  This is done using a
	combination of the GNU dynamic loading package
	(ftp://ftp.cwi.nl/pub/dynload/dl-dld-1.1.tar.Z) and an
	emulation of the SGI dl library mentioned above (the emulation
	can be found at
	ftp://ftp.cwi.nl/pub/dynload/dld-3.2.3.tar.Z).  To
	enable this, ftp and compile both libraries, then call the
	configure passing it the option
	--with-dl-dld=DL_DIRECTORY,DLD_DIRECTORY where DL_DIRECTORY is
	the absolute pathname of the dl emulation library and
	DLD_DIRECTORY is the absolute pathname of the GNU dld library.
	(Don't bother on SunOS 4 or 5, they already have dynamic
	linking using shared libraries.)  Support for this feature is
	deprecated.

--with-libm, --with-libc: It is possible to specify alternative
	versions for the Math library (default -lm) and the C library
	(default the empty string) using the options
	--with-libm=STRING and --with-libc=STRING, respectively.  E.g.
	if your system requires that you pass -lc_s to the C compiler
	to use the shared C library, you can pass --with-libc=-lc_s.
	These libraries are passed after all other libraries, the C
	library last.
	
--with-next-archs='arch1 arch2': Under NEXTSTEP, this will build
	all compiled binaries with the architectures listed.  Includes
	correctly setting the target architecture specific resource
	directory.  (This option is not supported on other platforms.)

--with-libs='libs': Add 'libs' to the LIBS that the python
	linked against.


Building for multiple architectures (using the VPATH feature)
-------------------------------------------------------------

If your file system is shared between multiple architectures, it
usually is not necessary to make copies of the sources for each
architecture you want to support.  If the make program supports the
VPATH feature, you can create an empty build directory for each
architecture, and in each directory run the configure script (on the
appropriate machine with the appropriate options).  This creates the
necessary subdirectories and the Makefiles therein.  The Makefiles
contain a line VPATH=... which points to directory containing the
actual sources.  (On SGI systems, use "smake -J1" instead of "make" if
you use VPATH -- don't try gnumake.)

For example, the following is all you need to build a minimal Python
in /usr/tmp/python (assuming ~guido/src/python is the toplevel
directory and you want to build in /usr/tmp/python):

	$ mkdir /usr/tmp/python
	$ cd /usr/tmp/python
	$ ~guido/src/python/configure
	[...]
	$ make
	[...]
	$

Note that Modules/Makefile copies the original Setup file to the build
directory if it finds no Setup file there.  This means that you can
edit the Setup file for each architecture independently.  For this
reason, subsequent changes to the original Setup file are not tracked
automatically, as they might overwrite local changes.  To force a copy
of a changed original Setup file, delete the target Setup file.  (The
makesetup script supports multiple input files, so if you want to be
fancy you can change the rules to create an empty Setup.local if it
doesn't exist and run it with arguments $(srcdir)/Setup Setup.local;
however this assumes that you only need to add modules.)


Building on non-UNIX systems
----------------------------

Building Python for a PC is now a piece of cake!

Enter the directory "PC" and read the file "readme.txt".  Most popular
non-Unix PC platforms and compilers are supported (Unix ports to the
PC such as Linux, FreeBSD or Solaris-x86 of course use the standard
Unix build instructions).

For the Mac, a separate source distribution will be made available,
for use with the CodeWarrior compiler.  If you are interested in Mac
development, join the PythonMac Special Interest Group
(http://www.python.org/sigs/pythonmac-sig/, or send email to
pythonmac-sig-request@python.org).

Of course, there are also binary distributions available for these
platforms -- see http://www.python.org/python/.

To port Python to a new non-UNIX system, you will have to fake the
effect of running the configure script manually (for Mac and PC, this
has already been done for you).  A good start is to copy the file
config.h.in to config.h and edit the latter to reflect the actual
configuration of your system.  Most symbols must simply be defined as
1 only if the corresponding feature is present and can be left alone
otherwise; however RETSIGTYPE must always be defined, either as int or
as void, and the *_t type symbols must be defined as some variant of
int if they need to be defined at all.



Miscellaneous issues
====================

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

All documentation is provided in the subdirectory Doc in the form of
LaTeX files.  In order of importance for new users: Tutorial (tut),
Library Reference (lib), Language Reference (ref), Extending (ext).
Especially the Library Reference is of immense value since much of
Python's power (including the built-in data types and functions!) is
described here.

To print the documentation from the LaTeX files, chdir into the Doc
subdirectory, type "make" (let's hope you have LaTeX installed!), and
send the four resulting PostScript files (tut.ps, lib.ps, ref.ps, and
ext.ps) to the printer.  See the README file there.  If you don't have
LaTeX, you can ftp the PostScript files from the ftp archives (see
below).

All documentation is also available on-line via the Python web site
(http://www.python.org/, see below).  It can also be downloaded
separately from the ftp archives (see below) in Emacs INFO, HTML or
PostScript form -- see the web site or the FAQ (file Misc/FAQ) for
more info.


Emacs mode
----------

There's an excellent Emacs editing mode for Python code; see the file 
Misc/python-mode.el.  Originally written by Tim Peters, it is now 
maintained by Barry Warsaw <bwarsaw@cnri.reston.va.us>.


Web site
--------

Python's own web site has URL http://www.python.org/.  Come visit us!
There are a number of mirrors, listed on the home page -- try a mirror
that's close you you.


Ftp site
--------

Python's own ftp site is ftp.python.org, directory /pub/python.  See
the FAQ (file Misc/FAQ) for a list of other ftp sites carrying the
Python distribution.


Newsgroup and mailing list
--------------------------

There are a newsgroup and a mailing list devoted to Python.  The
newsgroup, comp.lang.python, contains exactly the same messages as the
mailing list (though not always in the same order, due to the
mysterious nature of the Usenet news distribution algorithm).  To
subscribe to the mailing list, send mail containing your real name and
e-mail address to "python-list-request@cwi.nl".  Use the same address
if you want to unsibscribed.  (A real person reads these messages, so
no LISTPROC or Majordomo commands, please, and please be patient --
normal turn-around time is about one working day.)

The Python web site contains a search form that lets you search the
newsgroup archives (or the web site itself).  Click on the "search"
link in the banner menu on any page of http://www.python.org/.


Bug reports
-----------

Bugs are best reported to the comp.lang.python newsgroup or the Python
mailing list -- see the section "Newsgroup and mailing list" above.
Before posting, check the newsgroup archives (see above) to see if
your bug has already been reported!


Questions
---------

For help, if you can't find it in the manuals, the FAQ or on the web
site, it's best to post to the comp.lang.python or the Python mailing
list (see above).  If you specifically don't want to involve the
newsgroup or mailing list, send questions to python-help@python.org.


The Tk interface
----------------

Tk (the user interface component of John Ousterhout's Tcl language) is
also usable from Python.  Since this requires that you first build and
install Tcl/Tk, the Tk interface is not enabled by default.  It works
with Tcl 7.5 and Tk 4.1 as well as with Tcl 7.4 and Tk 4.0.  I didn't
have the time to test it with Tcl 7.6 and Tk 4.2 yet, but it might
well work.

See http://www.sunlabs.com/research/tcl/ for more info on where to get
Tcl/Tk.

To enable the Python/Tk interface, once you've built and installed
Tcl/Tk, all you need to do is edit two lines in Modules/Setup; search
for the string "_tkinter".  Uncomment one (normally the first) of the
lines beginning with "#_tkinter" and un-comment the line beginning
with "#TKPATH".  If you have installed Tcl/Tk or X11 in unusual
places, you will have to edit the first line to fix or add -I and -L
options.  See the Build Instructions above for more details.

There is little documentation on how to use Tkinter; however most of
the Tk manual pages apply quite straightforwardly.  Begin with
fetching the "Tk Lifesaver" document,
e.g. ftp://ftp.python.org/pub/python/doc/tkinter-doc.tar.gz (a gzipped
tar file containing a PostScript file) or the on-line version
http://www.python.org/doc/life-preserver/index.html.  Reading the
Tkinter.py source will reveal most details on how Tkinter calls are
translated into Tcl code.

There are demos in the Demo/tkinter directory, in the subdirectories
guido, matt and www (the matt and guido subdirectories have been
overhauled to use more recent Tkinter coding conventions).

Note that there's a Python module called "Tkinter" (capital T) which
lives in Lib/tkinter/Tkinter.py, and a C module called "_tkinter"
(lower case t and leading underscore) which lives in
Modules/_tkinter.c.  Demos and normal Tk applications only import the
Python Tkinter module -- only the latter uses the C _tkinter module
directly.  In order to find the C _tkinter module, it must be compiled
and linked into the Python interpreter -- the _tkinter line in the
Setup file does this.  In order to find the Python Tkinter module,
sys.path must be set correctly -- the TKPATH assignment in the Setup
file takes care of this, but only if you install Python properly
("make install libinstall").  (You can also use dynamic loading for
the C _tkinter module, in which case you must manually fix up sys.path
or set $PYTHONPATH for the Python Tkinter module.)


Distribution structure
----------------------

Most subdirectories have their own README file.  Most files have
comments.

BUGS            A list of known bugs (not completely up-to-date)
Demo/           Demonstration scripts, modules and programs
Doc/            Documentation (LaTeX sources)
Grammar/        Input for the parser generator
Include/        Public header files
Lib/            Python library modules
Makefile.in     Source from which config.status creates Makefile
Misc/           Miscellaneous files
Modules/        Implementation of most built-in modules
Objects/        Implementation of most built-in object types
PC/             PC porting files (DOS, Windows, NT, OS/2)
Parser/         The parser and tokenizer and their input handling
Python/         The "compiler" and interpreter
README          The file you're reading now
TODO            A list of things that could be done (not up-to-date)
Tools/          Some useful programs written in Python
acconfig.h      Additional input for the autoheader program
config.h.in     Source from which config.status creates config.h
configure       Configuration shell script (GNU autoconf output)
configure.in    Configuration specification (GNU autoconf input)
install-sh      Shell script used to install files

The following files will (may) be created in the toplevel directory by
the configuration and build processes:

Makefile        Build rules
config.cache    cache of configuration variables
config.h        Configuration header
config.log      log from last configure run
config.status   status from last run of configure script
python          The executable interpreter
tags, TAGS      Tags files for vi and Emacs


Author's address
================

Guido van Rossum
CNRI
1895 Preston White Drive
Reston, VA 20191
USA

E-mail: guido@cnri.reston.va.us or guido@python.org



Copyright notice
================

The Python source is copyrighted, but you can freely use and copy it
as long as you don't change or remove the copyright notice:

----------------------------------------------------------------------
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or
CNRI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.

STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
----------------------------------------------------------------------


--Guido van Rossum (home page: http://www.python.org/~guido/)
