This is Python release 1.5 alpha 4
==================================

******************************************
*** RELEASE RESTRICTED TO PSA MEMBERS! ***
******************************************


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

Too much has changed to list it all here.  There's a loooong list of
changes in Misc/NEWS.  This file is now *complete*: it has all changes
made since 1.4 (all changes worth mentioning, anyway).  The complete
list of changes since 1.5a4 is presented at the end of the file.  (It
could still use a better organization.  Want to volunteer to add
better structor or convert it to HTML?)

  - There's support in the readline module to change bindings and
  write your own command completer in Python.  An example completer is
  in rlcompleter.py.

  - The new re module is here.  It is based on Philip Hazel's pcre
  code; the Python interfaces were put together by Andrew Kuchling.
  The regex module is declared obsolete.  (The previous re
  implementation, obsolete though it is, is still available as
  re1.py, as a keepsake.)

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

  - Sequence assignments no longer require exact matching of the type
  of sequence on the left- and right-hand side.  For example
    (a, b, c) = [1, 2, 3]
  is now legal.  (The lengths must still match exactly.)

  - dict.get(key, default) returns dict[key] if it exists, and default
  otherwise; default defaults to None.

  - Class objects now have a __module__ attribute giving the module
  name in which they were defined.

  - 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 loaded
  in the package's namespace instead of as a submodule.  See
    http://grail.cnri.reston.va.us/python/essays/packages.html
  for more info.

  - A site can append items to the end of the default sys.path by
  placing directory names in files named *.pth in either
  $prefix/lib/site-python/ or $prefix/lib/python1.5/site-packages/.
  This is implemented in the module site.py which is now loaded by
  default at the end of initialization; use python -S to skip this.
  See
    http://grail.cnri.reston.va.us/python/essays/packages.html
  for more info.

Other important changes, if this is the first release you see since
1.4:

  - It's much faster (almost twice for pystone.py -- see
  Tools/scripts.)

  - There's an assert statement.

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

  - Comparisons can now raise exceptions.

  - New dictionary methods: .clear(), .update(), .copy().

  - It's 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 infamous killer joke, ehh, metaclass support, is now
  available.  See Demo/metaclasses/ for more info.

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

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

  - There's 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.

  - New regression test harness tests more.


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


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.


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

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

QNX:	Edit the top level Makefile to use the following compile options:
	OPT = -Ox -Q -U_M_IX86 -U__WATCOMC__
	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).


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

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

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

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.

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, NT, OS/2)
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/)
