This is Python release 1.5 beta 1
==================================

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

There's a loooong list of changes since release 1.4 in the file
Misc/NEWS.  Some highlights:

  - It's much faster (almost twice for the Lib/test/pystone.py
  benchmark.)

  - There is now an assert statement: ``assert <condition>'' or
  ``assert <condition>, <errormessage>''.  It raises AssertionError if
  the condition evaluates to false.  The default error message is
  empty; the source text of the assertion statement is printed as part
  of the traceback.

  - There is now built-in support for importing hierarchical module
  names (e.g. "import spam.ham.eggs"); ni is declared obsolete.  Note
  that the built-in package support is somewhat simpler (no __ and
  __domain__) and differs in one crucial aspect: __init__.py is
  required, and loaded in the package's namespace instead of as a
  submodule.  For more information, see
  http://grail.cnri.reston.va.us/python/essays/packages.html.

  - The new "re" module (Perl style regular expressions) is here.  It
  is based on Philip Hazel's pcre code; the Python interfaces were put
  together by Andrew Kuchling, Tim Peters and Jeffrey Ollie.  The
  regex module is declared obsolete.

  - In support of the re module, a new form of string literals is
  introduced, "raw strings": e.g. r"\n" is equal to "\\n".

  - All standard exceptions and most exceptions defined in standard
  extension modules are now classes.  Use python -X to revert back to
  string exceptions.  See
    http://grail.cnri.reston.va.us/python/essays/stdexceptions.html
  for more info.

  - Comparisons can now raise exceptions (previously, exceptions
  occuring during comparisons were swept under the rug).

  - New dictionary methods: .clear(), .copy(), .update(), .get().  The
  first two are obvious; d1.update(d2) is equivalent to the for loop
  ``for k in d2.keys(): d1[k] = d2[k]''; and d.get(k) returns d[k] if
  it exists and None (or the optional second argument) if not.

  - There is a new regression test harness, which tests many more
  modules.  (To run the tests, do "import test.autotest".)

  - The interpreter is much smarter about the initial value for
  sys.path; you can control it easier using $PYTHONHOME (see the usage
  message, e.g. try ``python -h'').  In most situations, the
  interpreter can be installed at an arbitrary location without having
  to recompile.

  - The build process now builds a single library (libpython1.5.a)
  which contains everything except for the main() entry point.  This
  makes life much easier for applications that embed Python.

  - There is much better support for embedding, including threads,
  multiple interpreters(!), uninitialization, and access to the global
  interpreter lock.

  - There is a -O option that removes SET_LINENO instructions, assert
  statements and code prefixed with ``if __debug__: ...''.  (It still
  only makes a few percent difference, so don't get all worked up
  about this.)

  - The Grand Renaming is completed: all linker-visible symbols
  defined by Python now have a "Py" or "_Py" prefix, and the same is
  true for most macros and typedefs.

If you were an alpha tester, here are the most relevant changes since
1.5a4 (of course all known bugs have been fixed, leaks plugged, and
some documentation has been added).  The full list of changes since
1.5a4 is presented at the end of the Misc/NEWS file.

  - Package directories now *require* the presence of __init__.py (or
  .pyc/.pyo as applicable).  Packages can now contain shared
  library modules.

  - New module 'fileinput' to iterate over the lines of a list of files.

  - New module 'locale' for localized number formatting and string case
  sensitivity.

  - New module 'xmllib' to parse XML files.

  - Some more support for Tk extensions (PIL, TIX, BLT, TOGL).

  - Fixed address list parsing in module 'rfc822'.

  - More deployment (and only one fix) for the 're' module.

  - New Python mode for Emacs.

  - OS/2 support.


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. :-)


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

Python is an interpreted object-oriented programming language, and is
often compared to Tcl, Perl, Java or Scheme.  To find out more, point
your browser to http://www.python.org/.


A modest plug
-------------

************************************************************************
* Without your support, I won't be able to continue to work on 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!


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.  Both
tutorials (as well as most other sources) assume that you already know
how to program -- if you'd like to write "Python for Dummies", I know
a publisher who would like to talk to you...

There are now also several books on Python.  While these are still
based on Python 1.3 or 1.4, the information in them is still 99%
correct.  The first two 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 can read German, try:

	Das Python-Buch
	by Martin von Loewis and Nils Fischbeck
	Addison-Wesley-Longman, 1997
	ISBN: 3-8273-1110-1


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

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

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.


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
(http://grail.cnri.reston.va.us/cgi-bin/faqw.py or
http://www.python.org/doc/FAQ.html) 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.  When you fix a
configure problem, be sure to remove config.cache!

If you get a warning for every file about the -Olimit option being no
longer supported, you can ignore it.  There's no foolproof way to know
whether this option is needed; all I can do is test whether it is
accepted without error.  On some systems, e.g. older SGI compilers, it
is essential for performance (specifically when compiling ceval.c,
which has more basic blocks than the default limit of 1000).  If the
warning bothers you, edit the Makefile to remove "-Olimit 1500" from
the OPT variable.


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

64-bit platforms: The modules audioop, imageop and rgbimg don't work.
	Don't try to enable them in the Modules/Setup file.  They
	contain code that is quite wordsize sensitive.  (If you have a
	fix, let me know!)

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".)

	Under RedHat Linux 5.0, if upgraded from a previous version,
	remove the LinuxThreads packages.  This is needed because
	LinuxThreads conflicts with the new thread support provided by
	glibc.  Before running Python's configure script, use the
	following commands as root (version numbers may differ; these
	are from a stock 4.2 install):

	% rpm -qa | grep ^linuxthread
	linuxthreads-0.5-1
	linuxthreads-devel-0.5-1
	% rpm -e linuxthreads linuxthreads-devel

	While Python only needs this to be done to allow thread
	support to be included, the conflicts these packages create
	with the new glibc may cause other packages which use threads
	to fail as well, so their removal is a good idea regardless of
	how you configure python.

	Also under RedHat Linux 5.0, the crypt module now needs the
	-lcrypt option.  Uncomment this flag in Modules/Setup, or
	comment out the crypt module in the same file.

DEC Unix: When enabling threads, use --with-dec-threads, not
	--with-thread.

AIX:	A complete overhaul of the shared library support is now in
	place.  See Misc/AIX-NOTES for some notes on how it's done.

	WARNING!  In some versions of AIX, 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.  According to the latest
	reports, it seems this compiler bug is still present in 4.2.1.

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 is
	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 4.x: When using the standard "cc" compiler, certain modules may

	not be compilable because they use non-K&R syntax.  You should
	be able to get a basic Python interpreter by commenting out
	such modules in the Modules/Setup file, but I really recommend
	using gcc.

	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.

QNX:	Chris Herborth (chrish@qnx.com) writes:
	configure works best if you use GNU bash; a port is available on
	ftp.qnx.com in /usr/free.  I used the following process to build,
	test and install Python 1.5 under QNX:

	1) SHELL=/usr/local/bin/bash CC=cc CFLAGS=-5 -O RANLIB=: \
	    bash ./configure --verbose --without-gcc --with-libm=""

	2) copy Modules/Setup.in to Modules/Setup; edit Modules/Setup to
	   activate everything that makes sense for your system... tested
	   here at QNX with the following modules:

		regex reop pcre posix signal readline array cmath math strop
		struct time operator _locale fcntl pwd grp crypt select socket
		errno termios audioop imageop rgbimg md5 timing rotor syslog
		new gdbm soundex binascii parser cStringIO cPickle zlib

	3) SHELL=/usr/local/bin/bash make SHELL=/usr/local/bin/bash

	4) SHELL=/usr/local/bin/bash make SHELL=/usr/local/bin/bash test

	   The socket, strftime and possibly gdbm tests might fail in the
	   test harness; going through them by hand shows that they work.
	   A good exercise for the reader: make these work "out of the box".

	5) SHELL=/usr/local/bin/bash make SHELL=/usr/local/bin/bash install

	If you get SIGSEGVs while running Python (I haven't yet, but I've
	only run small programs and the test cases), you're probably running
	out of stack; the default 32k could be a little tight.  To increase
	the stack size, edit the Makefile in the Modules directory to read:
	LDFLAGS = -N 48k

Cray T3E: Konrad Hinsen writes:
	1) Don't use gcc. It compiles Python/graminit.c into something that
	   the Cray assembler doesn't like. Cray's cc seems to work fine.
	2) Uncomment modules md5 (won't compile) and audioop (will crash
	   the interpreter during the test suite).
	If you run the test suite, two tests will fail (rotate and binascii),
	but these are not the modules you'd expect to need on a Cray.

SGI:	SGI's standard "make" utility (/bin/make or /usr/bin/make)
	does not check whether a command actually changed the file it
	is supposed to build.  This means that whenever you say "make"
	it will redo the link step.  The remedy is to use SGI's much
	smarter "smake " utility (/usr/sbin/smake), or GNU make.  If
	you set the first line of the Makefile to #!/usr/sbin/smake
	smake will be invoked by make (likewise for GNU make).

OS/2:   If you are running Warp3 or Warp4 and have IBM's VisualAge C/C++
        compiler installed, just change into the pc\os2vacpp directory
        and type NMAKE.  Threading and sockets are supported by default
        in the resulting binaries of PYTHON15.DLL and PYTHON.EXE.


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 twice (once with no compiled files, once with
the compiled files left by the previous test run).  The test set
produces some output.  You can generally ignore the messages about
skipped tests due to an optional feature that can't be imported (if
you want to test those modules, edit Modules/Setup to configure them).
If a messages is printed about a failed test or a traceback or core
dump is produced, something's wrong.  On some systems, test_strftime
fails due to a non-standard implementation of strftime() in the C
library.  This can be ignored (or you can complain to your vendor).

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
test that fails manually, as follows:

	python ../Lib/test/test_whatever.py

(substituting the top of the source tree for .. if you built in a
different directory).  This runs the test in verbose mode.


Installing
----------

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.5/" by default.  The Python binary is
installed as "python1.5" 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.5 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.5" 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.

--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: This option is no longer supported.  To use GNU
	readline, enable module "readline" in the Modules/Setup file.

--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.  NOTE:
	you must also enable the thread module by uncommenting it in
	the Modules/Setup file.  (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 Unix 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
(http://grail.cnri.reston.va.us/cgi-bin/faqw.py or
http://www.python.org/doc/FAQ.html) 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 the famous Tim Peters, it
is now maintained by the equally famous Barry Warsaw
<bwarsaw@cnri.reston.va.us>.  The latest version is online at
ftp://ftp.python.org/pub/emacs/python-mode.el.  As you might expect of
Barry (and even if you don't know what the heck I'm talking about :-),
a configuration file for his cc-mode.el which selects the style used
throughout most Python C source files is also provided; see the file
Misc/ccpy-style.el.


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://ftp.python.org/pub/python/.  There are
numerous mirrors; see http://www.python.org/python/Mirrors.html for a
list of mirror sites.


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 (and 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!  If you don't want to go public,
send them to me: <guido@python.org>.


Questions
---------

For help, if you can't find it in the manuals 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> (a group of
volunteers which does *not* include me).  Because of my work and email
volume, I'm often be slow in answering questions sent to me directly;
I prefer to answer questions posted to the newsgroup.


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.  Python
supports all Tcl/Tk versions from version 7.5/4.1 through 8.0 (and it
is expected that it will also work with newer versions).  Tcl/Tk
7.4/4.0 is no longer supported.  8.0 or any later non-alpha non-beta
release is recommended.

See http://sunscript.sun.com/ for more info on Tcl/Tk, including the
on-line manual pages.


To enable the Python/Tk interface, once you've built and installed
Tcl/Tk, load the file Modules/Setup in your favorite text editor and
search for the string "_tkinter".  Then follow the instructions found
there.  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.
(Also see the general instructions at the top of that file.)

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.

A more recent introduction to Tkinter programming, by Fredrik Lundh,
is at http://www.pythonware.com/library/tkinter/introduction/index.htm.

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.

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 useful files
Modules/        Implementation of most built-in modules
Objects/        Implementation of most built-in object types
PC/             PC porting files (DOS, Windows, OS/2)
PCbuild/	Directory where you should build for Windows NT/95
Parser/         The parser and tokenizer and their input handling
Python/         The "compiler" and interpreter
README          The file you're reading now
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
libpython1.5.a	The library archive
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/)
