How to install Python 1.3.3 on your Macintosh
------------------------------------------------

Even if you don't usually read readme files: please read at least the
first sections of this file, failure to do so will probably result in
an unuseable python system. If this warning is too late and you already
have an non-functional python: it is best to remove all traces and start
with a fresh distribution. Especially don't forget to remove the
"python preferences" file from the Preferences folder, and possibly
"PythonCore" from the Extensions folder. Before you mail me for help *please*
try the steps above (cleaning up and re-installing): it should fix most
common mistakes.

If this is your first encounter with Python: you definitely need the common
user documentation (common to all platforms). You can find this (in various
forms) on www.python.org and ftp.python.org.

Mac-specific documentation is included in this distribution in folder Mac:Demo.
The documentation is sparse, but it will have to serve for now. The documentation
is in HTML format, start with index.html.

If you have a pre-system 7 macintosh: sorry, this release will not work
on your system. Too many sys7 features are used to make a sys6 python
easy to create. If you really want one: tell me, maybe I can be convinced.
Alternatively: get the sources, put in the necessary gestalt() and
compatability calls yourself and send me the results.

If you don't have enough memory: the sizes choosen are somewhat arbitrary.
Try lowering them and seeing whether the resulting python is still usable.
Note, however, that python running out of memory may result in your mac
freezing. If this happens I would like to hear of it.

Note that if you're using Tk you might want to raise the memory size, tcl
and tk are quite a memory hog.

PowerPC Macintosh instructions
------------------------------

1. Remove older versions of "PythonCore" and "Python Preferences"
   from your system folder.
   
2. Run the MkPluginAliases applet. This will first ask you whether it should
   create an initial preferences file. Let it do so. Next, it will create a
   number of aliases in the PlugIns folder. If this fails in mysterious ways
   examine the script (in Mac:scripts:MkPluginAliases.py) and create the aliases
   by hand (and tell me what you did to make the script fail:-).

3. To make sure any applets you create can find the common interpreter code
   you should move PythonCore to the Extensions folder (drop it on the
   System Folder and it will find its own way). Alternatively, you can
   make an alias called "PythonCore" in the Extensions folder and
   point it to the real PythonCore. You may want to start PythonPPC
   again at this point to check that you actually put the extension in
   the right place.

4. You're all set now. Continue with the common instructions.

68K Macintosh instructions
--------------------------

1. Remove old "Python Preferences" file from the Preferences folder, if you
   have one (the file, that is, not the folder:-).
   
2. Run Python68K. This will create an initial preferences file (after
   asking you if that's ok with you). Quit python.
   
3. Continue with the next section.

Common instructions
-------------------

You should now have a functioning python. It is probably a good idea to run
"testall.py" from :Lib:test at this point, this should not give any errors.
Running testall.py is done by double-clicking it or dropping it onto the
interpreter.
Next, try "compileall.py" from :Lib to create all .pyc files (but this isn't
really important).

PPC users have a couple of applets in the main folder they may want to try,
(68K users can use the corresponding scripts from the "scripts" folder):

- EditPythonPrefs allows you to edit the preferences file, to change the
  python home folder or modify the initial sys.path setting.
  The default settings are "liberal", you can remove stdwin and tkinter if
  you don't use them and maybe others.
- RunLibScript allows you to run any script as __main__ after setting arguments,
  changing stdin/stdout/workdir, etc. Most of this functionality can also be
  obtained nowadays by option-dragging a script to the interpreter.
- For PPC only, mkapplet creates a python applet, a tiny application written
  in python. Drop a python source on it and out comes the application. More
  information can be found in the "Mac:Demo" folder.
  
PPC users will see one more files in the python folder: PythonApplet. This is
the template for building applets, leave it alone.

Things to see
-------------

There are some readme files in the "Read me files" folder that may contain
useful information. There is also a first stab at documentation (plus examples)
in the Mac:Demo folder. The toplevel Demo folder has machine-independent demos.
See the file Readme-mac for mac-specific notes. The Mac:Lib:test folder also
has some programs that show simple capabilities of various modules.

The "scripts" folder has some sample scripts. Some are useful, some are just
interesting to look at to see how various things work. The MkDistr, mkapplet
and fullbuild scripts (plus the ones mentioned above) may help you to understand
how to use AppleEvents and various other toolboxes from python.

The 'img' group of modules, which handles I/O of many different image formats
(not pict yet, sigh:-) is included, but without documentation. You can find
docs at ftp://ftp.cwi.nl/pub/jack/python/img (or somewhere around there).

Feedback
--------

Send bug reports, suggestions, contributions and fanmail to <jack@cwi.nl>.
Be warned however that I'm pretty busy at the moment, so I may not always
respond immedeately.
Alternatively, you can try sending to comp.lang.python or python-list@cwi.nl,
but since I read the newsgroup, not the mailinglist, I may miss it there
(but other people may know quite a bit more than me anyway:-).

				Jack Jansen
				Centrum voor Wiskunde en Informatica
				Kruislaan 413
				1098 SJ  Amsterdam
				the Netherlands
				
				<jack@cwi.nl>, http://www.cwi.nl/~jack
