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

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. Through
there, or via http://www.cwi.nl/~jack/macpython.html you can also find
the most recent MacPython distribution.

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.

Caveats
-------
There are still problems with cfm68k Python. 68K Mac users should
probably try to use the cfm68k distribution first, and revert to the
classic 68k distribution in case the bugs make their Python
unworkable.  The main problem is that packages ("dotted import") and
NumPy printing don't work.

What to install
---------------

There are three flavors of Python: PowerPC, cfm68k and Classic 68k (the
FAT flavor is just a combination of the first two, which is handy if you
want to install Python on a fileserver or so). 68K-mac owners should
definitely use the cfm68k version if possible, since it enables the use
of applets and dynamically loaded modules and usually has a smaller
memory footprint. It does however need the CFM68K Runtime Enabler which
is available from Apple (available for free from
<http://support.info.apple.com/ftp/swhome.html>, included since MacOS
7.6.1). If your machine is pre-68020 you cannot use cfm68k and you can
install the classic 68k Python.

After the installer finishes it automatically launches the
ConfigurePython applet, to finish configuration of your Python
installation (except for classic 68K installations, where no extra
configuration is needed).

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 don't have enough memory: the sizes choosen are somewhat
arbitrary. Try lowering the application sizes in the finder "get info"
window, and seeing whether the resulting python is still usable. Some
modules (Tkinter comes to mind) need a lot of memory, so it may also be
necessary to increase the application size.

A final note to CFM68K (and possibly PPC) users: the Code Fragment
Manager can (incorrectly) produce "library not found" and other strange
error messages when it really means that there is not enough room in the
system heap. Decreasing (yes, *de*creasing) the size of the interpreter
and/or enabling virtual memory may solve these problems.

After installing
----------------

The first step thing you could try is to run "compileall.py" to create
all .pyc files, but this isn't very important, as pyc files are
created on-the-fly as well. You may also want to skip this step if you
are low on diskspace.

Next, it is probably a good idea to run the automatic tests. Start
Python and "import test.autotest". This should not print any
errors. It will, however, print some messages about optional features
not supported. Also, if you didn't run compileall before autotesting
you may run out of memory the first time you run the
tests. test_socket may also fail if you have no internet
connection. Please also read the Relnotes file for other minor
problems with this distribution.

PPC and CFM68K 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 somewhat arbitrary, you can remove tkinter if you don't use
it and possibly add Extensions:img:Lib. - 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.

If you have a slow machine you may want to disable automatic site.py import
since site.py does not do too much on the mac (unless you make it do
something), and it can take a few seconds.

PPC and CFM68K users will see one more file in the python folder:
PythonApplet. This is the template for building applets, leave it alone.
The applet is "fat", containing both PPC and CFM68K code. Hence, applets
built with it can be transported to machines with the other
architecture.

Uninstalling
------------

Two items are installed in the system folder: the interpreter shared
library "PythonCore 1.5.1" lives in the Extensions folder and the
"Python 1.5.1 Preferences" file in the Preferences folder. All the rest
of Python lives in the folder you installed in.

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 is included, but without documentation.  You can find docs at
ftp://ftp.cwi.nl/pub/jack/python/img (or somewhere around there).

Finally there is a Mac:Contrib folder which contains some contributed
software, including a Real Programming Environment and some AppleScript
related modules.

Upgrading from older Python releases
------------------------------------

Since release 1.4 Python releases are independent of each other, with
separate Preferences files, shared library names, etc. The good news is
that this means you can keep your older version around if you are unsure
whether to upgrade. The bad news is that your old preference settings
are lost and you have to set them again.

After you are satisfied that 1.5.1 works as expected you can trash
anything in the system folder that has "python" in the name and not
"1.5.1".

The installer
-------------

The installer for this product was created using Installer VISE Lite
from MindVision Software. For more information on Installer VISE Lite,
contact:
MindVision Software
7201 North 7th Street
Lincoln, NE 68521-8913
Voice: 402-477-3269
Fax: 402-477-1395
Internet: mindvision@mindvision.com
http://www.mindvision.com

Just van Rossum <just@letterror.nl> created the installer.

Feedback
--------

Send bug reports, suggestions, contributions and fanmail to
<jack@cwi.nl>. However, a better way to discuss MacPython is to join the
<pythonmac-sig@python.org> mailing list, which is explicitly meant for
this purpose.

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
