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, mainly for various AppleScript things.

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.5b2 works as expected you can trash
anything in the system folder that has "python" in the name and not
"1.5b2".

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@knoware.nl> created the installer in just a couple
of days (hours?).

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
