How to install MacPython-OS9 2.3a2 on your Macintosh
----------------------------------------------------

This is a MacPython that can run on Mac OS 8.6 with CarbonLib
installed, Mac OS 9 and Mac OS X. It is the direct successor of MacPython 2.2.

For Mac OS X users: you are probably better off with the normal unix distribution
of Python. That version also runs from the commandline, and if you do a framework
build it will contain all the functionality of this version too. A prebuilt
version will be available starting with the beta distributions.

If you are upgrading from a previous MacPython you should read :Misc:NEWS,
which lists the new features of this Python release. As of this release
the Mac-specific release notes have been moved to the "Mac" section of
the general NEWS file.

Two changes since 2.2 deserve special mention:
- Most Mac-specific modules have moved to :Lib:plat-mac. :Mac:Lib now contains
  only modules that are not shared with MacPython-OSX 2.3.
- macfs is now a pure Python wrapper module around various modules in the
  Carbon package. For 2.3a2 only this wrapping is incomplete: fsspec.SetDates()
  does not work yet. If you encounter any other problems please report them.

------

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.pythonlabs.com, 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.

If you want a MacPython that runs on systems without Carbon support (8.1
up to 8.6 without CarbonLib) you should get MacPython 2.2.2.

If you want 68k support you will have get MacPython 1.5.2.

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

The optional parts in this distribution are
- PIL: the Python image manipulation package (allows you to read, write
  and display images and do lots of operations on them). Tkinter is no
  longer supported, a working Carbon version is Tk is not available.
- img: another imaging package. Has more file format support and is faster
  than imaging, but has only limited operations on images. There is a bridge
  between the packages.
- Numeric: the LLNL Numeric Python extension. All sorts of nifty operations
  on matrices and such. This is version 22.
- Developers kit: all header files and some tools and sample projects
  to get you started on writing Python extensions if you have CodeWarrior.
All these except the DevKit are installed with Easy Install.

After the installer finishes it automatically launches the
ConfigurePython applet, to finish configuration of your Python. 

Moving your Python installation after installing is generally not a
good idea.  If you have to do this anyway you should remove your
preference file, run ConfigurePython and remove all .pyc
files. (there's a script zappyc.py that does the latter).

If you don't have enough memory: the sizes choosen are somewhat
arbitrary, and they are as high as they are so that test.autotest runs
with fewer problems. An average Python program can make do with much
less memory.  Try lowering the application sizes in the finder "get
info" window, and seeing whether the resulting python is still usable.

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

It is probably a good idea to run the automatic tests. Start
Python and "import test.regrtest ; test.regrtest.main()". 

test_socket and test_logging fail, this problem is being investigated.

test_tarfile fails, this problem is being investigated.

Three tests will fail on MacOS9 with MemoryErrors:
test_longexp, test_sha and test_zlib (on MacOSX these should pass).

If you increase the PythonInterpreter memory partition size they will
pass (but for longexp you have to increase it by an incredible amount,
400MB is rumoured). It will, however, print some messages about
optional features not supported. You should not worry about these,
they are modules that are supported by Python on other
platforms. 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.

Using Python is most easily done from the IDE, which has a builtin
editor, debugger and other goodies. The alternative is to use
PythonInterpreter, which is the lowlevel interpreter with a
console-window only (similar to Unix Python).

If your program uses Tkinter you MUST run it under PythonInterpreter,
Tkinter and IDE are incompatible and your program will fail in strange
ways.

OSX Multiple users note
-----------------------

Interaction with Mac OS X multiple users has been tested only very lightly.
If you install as a privileged user everything installs fine. 

If you install as a non-privileged user everything should install in your local
per-user folders. But: as there is no global PythonCore you can only run applets
if they reside in your toplevel Python folder.

If you install as a privileged user and then try to run
Python as another (non-privileged) user you may encounter a problem with
not having a preference file: the symptom is failing to import all sorts
of standard modules. If you remove your per-user Python preference files
(in ~/Library/Preferences) and then run PythonInterpreter once everything should
be fine.

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

Up to three items are installed in the MacOS 8 or 9 system folder: the interpreter
shared library PythonCore lives in the Extensions
folder and the "Python 2.3a2 Preferences" file in the Python subfolder
in the Preferences folder. All the rest of Python lives in the folder
you installed in.

On OSX the library is installed in /Library/CFMSupport. The ConfigurePython
applets will complain if you have no right to create the libraries there
(you need Admin privileges). This has one consequence: you will not be able to
run applets unless they reside in the MacPython folder (such as the IDE or
EditPythonPrefs). If you try to run an applet stored elsewhere you will
get a "Cannot locate PythonCore" error message.

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

Start off at Mac:Demo:index.html. Read at least the first few sections.

There is also a first stab at documentation (plus examples) in the
Mac:Demo folder. The toplevel Demo folder has machine-independent demos.

The ":Mac: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.

Other mac-specific goodies can be found in :Mac:Tools, of which the
IDE sources and a CGI framework deserve special mention.

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.

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

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

The ConfigurePython applet will try to detect incompatible
preferences files and offer to remove them. This means that re-running
ConfigurePython after a second install of the same MacPython version
(or after moving the Python folder) should fix things up correctly.

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

The installer for this product was created using Installer VISE
from MindVision Software. For more information on Installer VISE,
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.com> created the initial version of the
installer (with Installer Vise Lite), and Jack worked from there.

Thanks!
-------

As of Python 2.3 the MacPython thanks list has been merged into the
general acknowledgements, see :Misc:ACKS.

MacPython includes waste, a TextEdit replacement which is (c) 1998
Marco Piovanelli.

A special mention is deserved by Matthias Neeracher, who has written
the brilliant unix-compatible GUSI I/O library, without which
MacPython would not have sockets or select, and to Alexandre
Parenteau, who has ported this library to Carbon.

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.


Jack Jansen
CWI
Kruislaan 413
1098 SJ Amsterdam
the Netherlands

<jack@cwi.nl>, http://www.cwi.nl/~jack
