mirror of https://github.com/python/cpython
114 lines
5.5 KiB
Plaintext
114 lines
5.5 KiB
Plaintext
Building and using a framework-based Python on Mac OS X.
|
|
--------------------------------------------------------
|
|
|
|
This document provides a quick introduction to framework-based Python.
|
|
It is rather terse and probably incomplete, please send me feedback.
|
|
|
|
1. Why would I want a framework Python in stead of a normal static Python?
|
|
--------------------------------------------------------------------------
|
|
|
|
The main reason is because you want to create GUI programs in Python. With
|
|
the exception of X11/XDarwin-based GUI toolkits it appears that all GUI programs
|
|
need to be run from a fullblown MacOSX application (a ".app" bundle).
|
|
|
|
While it is technically possible to create a .app without using frameworks
|
|
you will have to do the work yourself if you really want this.
|
|
|
|
A second reason for using frameworks is that they put Python-related items
|
|
in only two places: /Library/Framework/Python.framework and /Applications/Python.
|
|
This simplifies matters for users installing Python from a binary distribution
|
|
if they want to get rid of it again. Moreover, due to the way frameworks
|
|
work a user without admin privileges can install a binary distribution in
|
|
his or her home directory without recompilation.
|
|
|
|
2. How does a framework Python differ from a normal static Python?
|
|
------------------------------------------------------------------
|
|
|
|
In everyday use there is no difference, except that things are stored in
|
|
a different place. If you look in /Library/Frameworks/Python.framework
|
|
you will see lots of relative symlinks, see the Apple documentation for
|
|
details. If you are used to a normal unix Python file layout go down to
|
|
Versions/Current and you will see the familiar bin and lib directories.
|
|
|
|
3. Do I need extra packages?
|
|
----------------------------
|
|
|
|
Yes, probably. If you want to be able to use the PythonIDE you will need to
|
|
get Waste, an all-singing-all-dancing TextEdit replacement, from www.merzwaren.com.
|
|
It will unpack into a folder named something like "Waste 2.1 Distribution". Make
|
|
a symlink called "waste" to this folder, somewhere beside your Python source
|
|
distribution (it can be "../waste", "../../waste", etc).
|
|
|
|
If you want Tkinter support you need to get the OSX AquaTk distribution. If you
|
|
want wxPython you need to get that. If you want Cocoa you need to get pyobjc.
|
|
Because all these are currently in a state of flux please refer to
|
|
http://www.cwi.nl/~jack/macpython.html, which should contain pointers to more
|
|
information.
|
|
|
|
4. How do I build a framework Python?
|
|
-------------------------------------
|
|
|
|
This directory contains a Makefile that will create a couple of python-related
|
|
applications (fullblown OSX .app applications, that is) in /Applications/Python,
|
|
and a hidden helper application Python.app inside the Python.framework. In addition
|
|
it has a target "installmacsubtree" that installs the relevant portions of the
|
|
Mac subtree into the Python.framework.
|
|
|
|
It is normally invoked indirectly through the main Makefile, as the last step
|
|
in the sequence
|
|
1. configure --enable-framework
|
|
2. make
|
|
3. make frameworkinstall
|
|
4. make osxapps
|
|
5. [optional] in Mac/OSX do "make installunixprograms", see below.
|
|
|
|
This sequence will put the framework in /Library/Framework/Python.framework and
|
|
the applications in /Applications/Python. Building in another place, for instance
|
|
$HOME/Library/Frameworks if you have no admin privileges on your machine, has only
|
|
been tested very lightly.
|
|
|
|
5. What do all these programs do?
|
|
---------------------------------
|
|
|
|
PythonIDE.app is an integrated development environment for Python: editor,
|
|
debugger, etc.
|
|
|
|
PythonLauncher.app is a helper application that will handle things when you
|
|
double-click a .py, .pyc or .pyw file. For the first two it creates a Terminal
|
|
window and runs the scripts with the normal command-line Python. For the latter
|
|
it runs the script in the Python.app interpreter so the script can do GUI-things.
|
|
Keep the "alt" key depressed while dragging or double-clicking a script to set
|
|
runtime options. These options can be set once and for all through PythonLauncher's
|
|
preferences dialog.
|
|
|
|
BuildApplet.app creates an applet from a Python script. Drop the script on it
|
|
and out comes a full-featured MacOS application. There is much more to this, to
|
|
be supplied later. Some useful (but outdated) info can be found in Mac/Demo.
|
|
|
|
If you install the commandline scripts /usr/local/bin/python and pythonw these
|
|
can be used to run non-GUI and GUI python scripts from the command line, respectively.
|
|
|
|
6. Odds and ends.
|
|
-----------------
|
|
|
|
The interesting targets in the makefile are:
|
|
installmacsubtree - explained above,
|
|
dontinstallmacsubtree - Put only a .pth file into the framework (pointing to this
|
|
sourcetree), which may be easier for development,
|
|
install_all - install all three .app applications,
|
|
install_Python - install the hidden interpreter .app into the framework,
|
|
install_PythonLauncher - install the user-visible script launch helper
|
|
install_IDE - install the IDE
|
|
installunixprograms - install symlinks/scripts mimicking normal unix Python into
|
|
/usr/local.
|
|
|
|
The PythonLauncher is actually an Objective C Cocoa app built with Project Builder.
|
|
It could be a Python program, except for the fact that pyobjc is not a part of
|
|
the core distribution, and is not completely finished yet as of this writing.
|
|
|
|
Something to take note of is that the ".rsrc" files in the distribution are not
|
|
actually resource files, they're AppleSingle encoded resource files. The macresource
|
|
module and the Mac/OSX/Makefile cater for this, and create ".rsrc.df.rsrc" files
|
|
on the fly that are normal datafork-based resource files.
|
|
|
|
Jack Jansen, jack@oratrix.com, 02-Aug-02 |