How to install MacPython-OS9 2.3a1 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.3a1 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_httplib fails with an unexpected output error, 
this problem is being investigated.

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

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
