This is Python release 1.5
==========================

This version is officially released on Wednesday, December 31, 1997.
It doesn't differ very much from 1.5b2 (released on Dec. 12).


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://www.python.org/doc/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://www.python.org/doc/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 previously downloaded 1.5b2, here are the most relevant changes
since then (of course all known bugs have been fixed, leaks plugged,
and quite a bit of documentation has been added -- including doc
strings here and there).  The full list of changes since 1.5b2 is
presented at the end of the Misc/NEWS file.

  - Thanks to all who contributed doc strings or other documentation!

  - Many small improvements to the quality of the documentation, both
  PostScript, HTML and even Emacs info (library manual only).

  - New module telnetlib.py.

  - New tool versioncheck.

  - Two bugs with ftp URLs fixed in urllib.py.

  - Fixed infinite recursion when printing __builtins__.

  - A bunch of small problems fixed in Tkinter.py.

  - Ported zlibmodule.c and bsddbmodule.c to NT.

  - Better NT support in tempfile.py.

  - Fixed 4294967296==0.

  - Latest re and pcre modules (versions of Dec. 22).


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.  When using GCC, it is possible to get an
	internal compiler error if optimization is used.  This was
	reported for GCC 2.7.2.3 on selectmodule.c.  Manually compile
	the affected file without optimization to solve the problem.

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.
	(The optimizer bug reported at this place in previous releases
	has been worked around by a minimal code change.)

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: There seems to be a linker problem -- the linker doesn't
	like the dot in the library name "-lpython1.5".  The simplest
	solution is to edit the "link:" target in Modules/Makefile to
	change
		-L.. -lpython$(VERSION)
	into
		$(LIBRARY)

	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 curses

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

	A bug in the MIPSpro 7.1 compiler's optimizer seems to break
	Modules/pypcre.c.  The short term solution is to compile it
	without optimization.  The bug appears to be fixed in version
	7.2.1 of the compiler.

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 Linux systems (those
that are not yet using glibc 6), test_strftime fails due to a
non-standard-compliant implementation of strftime() in the C library.
Please ignore this, or upgrade to glibc version 6.

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