How to install Python 1.5.2b1 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. If you have an older system than MacOS 8 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 and builtin to the system since MacOS 8). 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.2b1" lives in the Extensions folder and the
"Python 1.5.2b1 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.2b1 works as expected you can trash
anything in the system folder that has "python" in the name and not
"1.5.2b1".

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
