How to install Python 1.5b3 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.

Why 1.5b3?
----------
The reason for distributing a third beta release for the Mac (unlike for
other platforms) is that there are still some problems. The main problem
is that packages ("dotted import") seem to have problems when used
under cfm68k. Other outstanding problems are tkinter problems with menus
(all platforms) and NumPy printing problems (cfm68k). Please report your
findings with this distribution to pythonmac-sig@python.org, so we can
try to iron out the problems and have a normal 1.5 distribution in a few
weeks time.

The non-system-dependent part of this distribution is identical to 1.5 final.

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.

NOTE: as of 1.5b3 the test test_strftime will fail. This is due to a
problem with the way the MetroWerks handles %% escapes in strftime()
strings, and there is little I can do about it. 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.5b3" lives in the Extensions folder and the
"Python 1.5b3 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 (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).

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
