How to install Python 2.2a2 on your Macintosh
---------------------------------------------

This is a MacPython that can run on classic MacOS (from 8.1
onwards) and natively on MacOSX. The installer tries to work out whether you can
use the Carbon version or not.

You should definitely read the Relnotes file too, and the section below about
toolbox module reorganization.

A special note about the active installer: do not background it, it may hang
your machine. This is a general problem with Vise active installers, MindVision
are working on it.

Aside from the general new Python 2.2a2 listed in the general relnotes file
there is some other new machine-independent stuff in this release as well, as
it was built from newer sources than unix/windows 2.2a2.
------

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.

This installer installs MacPython for classic PPC MacOS, MacPython for Carbon
(OS X, OS 9 or OS8 with CarbonLib installed) or both, depending on your
configuration. By selecting custom install you can bypass these tests and
install what you want.

If you want 68k support you will have to stay with MacPython 1.5.2.

Toolbox module reorganization and more
--------------------------------------

You can safely skip this section if this is your first encounter with MacPython.

I am working on a new organization of the mac-specific modules, and in
general bringing the MacPython folder structure more in line with
unix-Python. This is not only a good idea, it will also immensely
facilitate moving MacPython functionality to an OSX Python that is based
on Mach-O and the unix-Python distribution. But don't worry: MacPython
is definitely not dead yet, and the hope is that the transition will be
as seamless as possible.

First a change that should not cause too much concern: :Mac:Plugins has
gone, and most of the dynamically loaded modules have moved to
:Lib:lib-dynload.

Second, and more important: the toolbox modules, such as Res and
Resource, have moved to a Carbon package. So, in stead of "import Res"
you should now say "from Carbon import Res" and in stead of "from Res
import *" you should use "from Carbon.Res import *". For the lifetime of
MacPython 2.2 there is a folder :Mac:Lib:lib-compat on sys.path that
contains modules with the old names which imports the new names after
issuing a warning.

Note that although the package is called Carbon the modules work fine under
classic PPC, and they are normal classic modules. Also note that some
modules you may think of as toolbox modules (such as Waste) really are not,
and they are not in the Carbon package.

Some open issues I would like to discuss on the PythonMac-SIG, please join
in if you have views on the matter:
- Is this all a good idea?
- Some modules are not in the Carbon package (icglue, for instance, or
  supporting module such as aetools and aepack) and maybe they should be,
  some are (ControlAccessors) which arguably should not. Opinions are welcome.
- I'm tempted to put Qt and QuickTime into their own package, especially
  since I'm also working on porting it to Windows. It would also be in line
  with Apple's organization. Opinions?
- Should we get rid of the Res/Resource dichotomy, where the first is the
  extension module and the second is the Python module with the constants?
  We could simply import the extension module functionality into the Python
  module, at the expense of a rather large namespace.
- Should we have a Carbon.Carbon module that simply imports the whole world,
  so that "from Carbon.Carbon import *" is pretty much equivalent to the C
  #include <Carbon/Carbon.h>?
- Should we put all the other Mac modules into a Mac package? This will make
  MacPython programs a lot more verbose, but that is a good thing too if people
  try to port Mac Python scripts to other platforms.
  Should the Carbon package then be a sub-package of the Mac package?
  
Another change related to the OSX growth path is that there is a new module
macresource that you can use to easily open a resource file accompanying your
script. Use "macresource.need("DLOG", MY_DIALOG_ID, "name.rsrc") and if the
given resource is not available (it _is_ available if your script has been
turned into an applet) the given resource file will be opened. This method will
eventually also contain the magic needed to open the resource file on
OSX MachO Python.

... and more
------------

A feature that I am not sure about (so: feedback!) is that if you open a textfile
for reading MacPython will now accept either unix linefeeds (LF, '\n') or
Macintosh linefeeds (CR, '\r') and present both of them as '\n'. This is done on
a low level, so it works for files opened by scripts as well as for your scripts
and modules itself.

But:
- this works only for input, and there's no way to find out what the original
  linefeed convention of the file was.
- this is unconditional, so there's no way to turn it off, either on a file-by-file
  basis or globally (but opening binary files works as it always has, of course).
- Windows \r\n linefeeds are not supported and get turned into \n\n.

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

The optional parts in this distribution are
- TK+PIL: Tkinter and support modules, plus Imaging, the Python image manipulation 
  package (allows you to read, write and display images and do lots of operations on them).
  For Carbon MacPython you only get PIL: there is no Tcl/Tk for Carbon yet.
  This is the reason Classic MacPython is also installed on MacOSX: it allows you
  to run Tkinter applications, albeit in the Classic box.
- 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 the most recent version from the sourceforge archive.
  Numeric has moved from Extensions to :Lib:site-python, by the way, see the release
  notes.
- 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 appropriate
ConfigurePython applet, to finish configuration of your Python. If you run MacOS9 or later
(or 8 with CarbonLib installed) you can switch back and forth between the classic and
Carbon versions of Python by running either ConfigurePythonClassic or ConfigurePythonCarbon.

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.autotest". 

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

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.

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

Two items are installed in the system folder: the interpreter shared
libraries PythonCore and PythonCoreCarbon lives in the Extensions folder and the
"Python 2.2a2 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 libraries are installed in /Library/CFMSupport. There is a nasty bug
in OSX that is triggered by Python: if any orphaned aliases are left in
/Library/CFMSupport your machine will start to behave very badly. 2.1
beta installers triggered this problem if you simply threw away your Python folder,
so if you installed a 2.1beta you should clean out the aliases in /Library/CFMSupport
too. The final 2.1 and 2.1.1 installers always copied the shared libraries on OSX, so it does
not have the problem anymore.

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

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

There are also some interesting files in the "Relnotes" 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. 
The Mac:Lib:test folder also has some programs that show simple
capabilities of various modules.

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

The ConfigurePython... applets 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.nl> created the initial version of the
installer (with Installer Vise Lite), and Jack worked from there.

Thanks!
-------

Thanks go to the whole Python community with Guido in the lead, of
course. Mac-specific thanks go to the pythonmac-sig, Just van Rossum,
Corran Webster, Tony Ingraldi, Erik van Blokland, Bill Bedford, Chris
Stern, Gordon Worley, Oliver Steele, M. Papillon, Steven Majewski, David
Goodger, Chris Barker, Luc Lefebvre, Tattoo Mabonzo K., Russell Finn,
Tom Bridgman, Russel Owen, Pascal Oberndoerfer, Dean Draayer
and all the other people who provided feedback, code or both!

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
Oratrix Development BV
Valeriusplein 30
Amsterdam
the Netherlands

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