How to install Python 2.2b1 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. You should also read :Misc:NEWS, which lists
the general (non-mac-dependent) new features of this Python release.

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.

------

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

Another feature to help with the OSX transition 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. This can be turned off with a preference/startup option.

But:
- this works only for input, and there's no way to find out what the original
  linefeed convention of the file was.
- 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.regrtest ; test.regrtest.main()". 

test_time will fail because MacPython accepts bogus values for mktime(), this
will be fixed later (it is not a very serious problem).

test_descrtut will fail because of a problem with the test itself.

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.

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

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,
Alexandre Parenteau,
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
