mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Updated.
This commit is contained in:
		
							parent
							
								
									c30d7c37ee
								
							
						
					
					
						commit
						7c0d7ba99d
					
				
					 1 changed files with 33 additions and 41 deletions
				
			
		| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
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.
 | 
			
		||||
This document provides a quick introduction to framework-based Python, its
 | 
			
		||||
advantages, and how to build it.
 | 
			
		||||
 | 
			
		||||
1. Why would I want a framework Python in stead of a normal static Python?
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -15,12 +15,16 @@ 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.
 | 
			
		||||
only two places: /Library/Framework/Python.framework and /Applications/MacPython-2.3.
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
Incidentally, the procedure described here is also the procedure that is
 | 
			
		||||
used to create the MacPython binary installer, so the information here
 | 
			
		||||
should theoretically allow you to rebuild that.
 | 
			
		||||
 | 
			
		||||
2. How does a framework Python differ from a normal static Python?
 | 
			
		||||
------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +55,7 @@ information.
 | 
			
		|||
 | 
			
		||||
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
 | 
			
		||||
/Applications/MacPython-2.3, and a hidden helper application Python.app inside the
 | 
			
		||||
Python.framework, and unix tools "python" and "pythonw" into /usr/local/bin.
 | 
			
		||||
In addition it has a target "installmacsubtree" that installs the relevant
 | 
			
		||||
portions of the Mac subtree into the Python.framework.
 | 
			
		||||
| 
						 | 
				
			
			@ -65,10 +69,10 @@ in the sequence
 | 
			
		|||
This sequence will put the framework in /Library/Framework/Python.framework,
 | 
			
		||||
the applications in /Applications/Python and the unix tools in /usr/local/bin.
 | 
			
		||||
 | 
			
		||||
Building in another place, for instance $HOME/Library/Frameworks if you have
 | 
			
		||||
Installing in another place, for instance $HOME/Library/Frameworks if you have
 | 
			
		||||
no admin privileges on your machine, has only been tested very lightly. This
 | 
			
		||||
can be done by configuring with --enable-framework=$HOME/Library/Frameworks.
 | 
			
		||||
The other two directories, /Applications/Python and /usr/local/bin, will then
 | 
			
		||||
The other two directories, /Applications/MacPython-2.3 and /usr/local/bin, will then
 | 
			
		||||
also be deposited in $HOME. This is sub-optimal for the unix tools, which you
 | 
			
		||||
would want in $HOME/bin, but there is no easy way to fix this right now.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +85,10 @@ If you want to install some part, but not all, read the main Makefile. The
 | 
			
		|||
frameworkinstall is composed of a couple of sub-targets that install the
 | 
			
		||||
framework itself, the Mac subtree, the applications and the unix tools.
 | 
			
		||||
 | 
			
		||||
There is an extra target frameworkinstallextras that is not part of the
 | 
			
		||||
normal frameworkinstall which installs the Demo and Tools directories
 | 
			
		||||
into /Applications/MacPython-2.3, this is useful for binary distributions.
 | 
			
		||||
 | 
			
		||||
If you want to run the Makefile here directly, in stead of through the main
 | 
			
		||||
Makefile, you will have to pass various variable-assignments. Read the
 | 
			
		||||
beginning of the Makefile for details.
 | 
			
		||||
| 
						 | 
				
			
			@ -111,44 +119,28 @@ non-GUI and GUI python scripts from the command line, respectively.
 | 
			
		|||
6. How do I create a binary distribution?
 | 
			
		||||
-----------------------------------------
 | 
			
		||||
 | 
			
		||||
Note: this section is work-in-progress.
 | 
			
		||||
Go to the Mac/OSX/Dist directory. There you find a script "build" that
 | 
			
		||||
does all the work: it configures and builds a framework Python, installs
 | 
			
		||||
it, creates the installer package file and packs this in a DMG image.
 | 
			
		||||
 | 
			
		||||
First, to make sure there's no contamination, it is best to remove your
 | 
			
		||||
existing Python installation (clear out /Library/Frameworks/Python.framework
 | 
			
		||||
and /Applications/Python). Also, after build/install is finished check that
 | 
			
		||||
nothing has shown up in those two locations.
 | 
			
		||||
All of this is normally done completely isolated in /tmp/_py, so it does not
 | 
			
		||||
use your normal build directory nor does it install into /.
 | 
			
		||||
 | 
			
		||||
Create a subdirectory of the main python directory, say build-pythondist. In
 | 
			
		||||
there, run
 | 
			
		||||
	../configure --enable-framework=/tmp/pythondist/Library/Frameworks \
 | 
			
		||||
		LDFLAGS=-Wl,-x
 | 
			
		||||
	make
 | 
			
		||||
	make frameworkinstall
 | 
			
		||||
This installs a complete distribution set in /tmp/pythondist: in a framework
 | 
			
		||||
build all other pathnames are computed from the framework pathname.
 | 
			
		||||
Because the build script locates the Python source tree relative to its own
 | 
			
		||||
pathname you may have to run it with a full pathname. If you are debugging your
 | 
			
		||||
install you can pass one argument: the pathname where the build directory
 | 
			
		||||
is located (i.e. where configure and make will be run), then this directory
 | 
			
		||||
will be saved between runs of the build script. Do *not* specify your normal
 | 
			
		||||
build directory here.
 | 
			
		||||
 | 
			
		||||
Optionally you may want to include the full documentation in the binary installer.
 | 
			
		||||
To this end, execute the following commands:
 | 
			
		||||
	python.exe ../Mac/OSX/setupDocs.py build
 | 
			
		||||
	python.exe ../Mac/OSX/setupDocs.py install \
 | 
			
		||||
		--prefix=/tmp/python/Library/Frameworks/Python.framework/Versions/Current
 | 
			
		||||
		
 | 
			
		||||
Note that the unix tools in /tmp/pythondist are wrong, these have to be
 | 
			
		||||
removed, and the installer post-install script should recreate them on the
 | 
			
		||||
target system. Also, the .pyc and .pyo files need to be removed:
 | 
			
		||||
	rm -rf /tmp/pythondist/usr
 | 
			
		||||
	python.exe ../Mac/script/zappycfiles.py /tmp/pythondist
 | 
			
		||||
build will ask you whether you have updated the readme file, and it will offer
 | 
			
		||||
to include the full documentation in the installer. That option has not
 | 
			
		||||
been used for a while, and it may not work.
 | 
			
		||||
 | 
			
		||||
Finally, create the .pkg file with a commandline like
 | 
			
		||||
	python ../Mac/scripts/buildpkg.py \
 | 
			
		||||
		--Title=MacPython-X \
 | 
			
		||||
		--Version=2.3a0 \
 | 
			
		||||
		--Description="Python for Mac OS X, framework based" \
 | 
			
		||||
		/tmp/pythondist
 | 
			
		||||
This creates a MacPython-X.pkg in the current directory.
 | 
			
		||||
 | 
			
		||||
TBD: provide postinstall scripts to precompile .pyc/.pyo files, and to recreate
 | 
			
		||||
the unix programs.
 | 
			
		||||
If you need to execute code on the client machine after installing Python
 | 
			
		||||
you can add this to resources/postflight. If you need to do even stranger things
 | 
			
		||||
you have to read Apple's documentation on PackageMaker and read the source
 | 
			
		||||
of Mac/scripts/buildpkg.py.
 | 
			
		||||
 | 
			
		||||
7. Odds and ends.
 | 
			
		||||
-----------------
 | 
			
		||||
| 
						 | 
				
			
			@ -164,4 +156,4 @@ 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, 06-Sep-02
 | 
			
		||||
	Jack Jansen, Jack.Jansen@cwi.nl, 20-Jun-2003.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue