1 Building and using a framework-based Python on Mac OS X.
2 --------------------------------------------------------
4 This document provides a quick introduction to framework-based Python, its
5 advantages, and how to build it.
7 1. Why would I want a framework Python in stead of a normal static Python?
8 --------------------------------------------------------------------------
10 The main reason is because you want to create GUI programs in Python. With the
11 exception of X11/XDarwin-based GUI toolkits it appears that all GUI programs
12 need to be run from a fullblown MacOSX application (a ".app" bundle).
14 While it is technically possible to create a .app without using frameworks you
15 will have to do the work yourself if you really want this.
17 A second reason for using frameworks is that they put Python-related items in
18 only two places: /Library/Framework/Python.framework and /Applications/MacPython-2.3.
19 This simplifies matters for users installing Python from a binary distribution
20 if they want to get rid of it again. Moreover, due to the way frameworks work
21 a user without admin privileges can install a binary distribution in his or
22 her home directory without recompilation.
24 Incidentally, the procedure described here is also the procedure that is
25 used to create the MacPython binary installer, so the information here
26 should theoretically allow you to rebuild that.
28 2. How does a framework Python differ from a normal static Python?
29 ------------------------------------------------------------------
31 In everyday use there is no difference, except that things are stored in
32 a different place. If you look in /Library/Frameworks/Python.framework
33 you will see lots of relative symlinks, see the Apple documentation for
34 details. If you are used to a normal unix Python file layout go down to
35 Versions/Current and you will see the familiar bin and lib directories.
37 3. Do I need extra packages?
38 ----------------------------
40 Yes, probably. If you want to be able to use the PythonIDE you will need to
41 get Waste, an all-singing-all-dancing TextEdit replacement, from
42 www.merzwaren.com. It will unpack into a folder named something like "Waste
43 2.1 Distribution". Make a symlink called "waste" to this folder, somewhere
44 beside your Python source distribution (it can be "../waste", "../../waste",
47 If you want Tkinter support you need to get the OSX AquaTk distribution. If
48 you want wxPython you need to get that. If you want Cocoa you need to get
49 pyobjc. Because all these are currently in a state of flux please refer to
50 http://www.cwi.nl/~jack/macpython.html, which should contain pointers to more
53 4. How do I build a framework Python?
54 -------------------------------------
56 This directory contains a Makefile that will create a couple of python-related
57 applications (fullblown OSX .app applications, that is) in
58 /Applications/MacPython-2.3, and a hidden helper application Python.app inside the
59 Python.framework, and unix tools "python" and "pythonw" into /usr/local/bin.
60 In addition it has a target "installmacsubtree" that installs the relevant
61 portions of the Mac subtree into the Python.framework.
63 It is normally invoked indirectly through the main Makefile, as the last step
65 1. ./configure --enable-framework
67 3. make frameworkinstall
69 This sequence will put the framework in /Library/Framework/Python.framework,
70 the applications in /Applications/Python and the unix tools in /usr/local/bin.
72 Installing in another place, for instance $HOME/Library/Frameworks if you have
73 no admin privileges on your machine, has only been tested very lightly. This
74 can be done by configuring with --enable-framework=$HOME/Library/Frameworks.
75 The other two directories, /Applications/MacPython-2.3 and /usr/local/bin, will then
76 also be deposited in $HOME. This is sub-optimal for the unix tools, which you
77 would want in $HOME/bin, but there is no easy way to fix this right now.
79 Note that there are no references to the actual locations in the code or
80 resource files, so you are free to move things around afterwards. For example,
81 you could use --enable-framework=/tmp/newversion/Library/Frameworks and use
82 /tmp/newversion as the basis for an installer or something.
84 If you want to install some part, but not all, read the main Makefile. The
85 frameworkinstall is composed of a couple of sub-targets that install the
86 framework itself, the Mac subtree, the applications and the unix tools.
88 There is an extra target frameworkinstallextras that is not part of the
89 normal frameworkinstall which installs the Demo and Tools directories
90 into /Applications/MacPython-2.3, this is useful for binary distributions.
92 If you want to run the Makefile here directly, in stead of through the main
93 Makefile, you will have to pass various variable-assignments. Read the
94 beginning of the Makefile for details.
97 5. What do all these programs do?
98 ---------------------------------
100 PythonIDE.app is an integrated development environment for Python: editor,
103 PythonLauncher.app is a helper application that will handle things when you
104 double-click a .py, .pyc or .pyw file. For the first two it creates a Terminal
105 window and runs the scripts with the normal command-line Python. For the
106 latter it runs the script in the Python.app interpreter so the script can do
107 GUI-things. Keep the "alt" key depressed while dragging or double-clicking a
108 script to set runtime options. These options can be set once and for all
109 through PythonLauncher's preferences dialog.
111 BuildApplet.app creates an applet from a Python script. Drop the script on it
112 and out comes a full-featured MacOS application. There is much more to this,
113 to be supplied later. Some useful (but outdated) info can be found in
116 The commandline scripts /usr/local/bin/python and pythonw can be used to run
117 non-GUI and GUI python scripts from the command line, respectively.
119 6. How do I create a binary distribution?
120 -----------------------------------------
122 Go to the Mac/OSX/Dist directory. There you find a script "build" that
123 does all the work: it configures and builds a framework Python, installs
124 it, creates the installer package file and packs this in a DMG image.
126 All of this is normally done completely isolated in /tmp/_py, so it does not
127 use your normal build directory nor does it install into /.
129 Because the build script locates the Python source tree relative to its own
130 pathname you may have to run it with a full pathname. If you are debugging your
131 install you can pass one argument: the pathname where the build directory
132 is located (i.e. where configure and make will be run), then this directory
133 will be saved between runs of the build script. Do *not* specify your normal
134 build directory here.
136 build will ask you whether you have updated the readme file, and it will offer
137 to include the full documentation in the installer. That option has not
138 been used for a while, and it may not work.
140 If you need to execute code on the client machine after installing Python
141 you can add this to resources/postflight. If you need to do even stranger things
142 you have to read Apple's documentation on PackageMaker and read the source
143 of Mac/scripts/buildpkg.py.
148 The PythonLauncher is actually an Objective C Cocoa app built with Project
149 Builder. It could be a Python program, except for the fact that pyobjc is not
150 a part of the core distribution, and is not completely finished yet as of this
153 Something to take note of is that the ".rsrc" files in the distribution are
154 not actually resource files, they're AppleSingle encoded resource files. The
155 macresource module and the Mac/OSX/Makefile cater for this, and create
156 ".rsrc.df.rsrc" files on the fly that are normal datafork-based resource
159 Jack Jansen, Jack.Jansen@cwi.nl, 20-Jun-2003.