convert python scripts into standalone Mac OS X applications (original) (raw)

Contents

Abstract

py2app is a Python distutils suite which provides several useful features for distributing Python applications and libraries on the Mac OS X platform. The py2app suite contains the following packages:

py2app:

A distutils command that converts Python scripts into executable Mac OS X applications, able to run without requiring a Python installation. It has been used to create standalone application bundles and plug-ins for open source, commercial, and in-house projects. It is known compatible with GUI frameworks such as wxPython, Tkinter, pygame, PyQt, andPyObjC, but it should work in the context of any framework with little or no effort. It may also be used in conjunction withPyObjC to write plug-ins for Cocoa applications, screen savers, preference panes, etc. This is a complete replacement for the bundlebuilder tool included in the Python standard library.

bdist_mpkg:

Creates Mac OS X installer .mpkg files from Python libraries. Installer packages are familiar to Mac OS X users, provide a safe and easy way to authenticate as root to install privileged files such as headers and scripts. Once a bdist_mpkgdistribution has been created, it may be installed to other machines with a similar Python environment without requiring a compiler. Installer packages can be used to do distributed installations with tools such as Apple Remote Desktop or they could be integrated into a custom Mac OS X installation DVD with a tool such as Slipy.

macholib:

Reads and writes the Mach-O object file format. Used by py2appto build a dependency graph of dyld and framework dependencies for your application, and then to copy them into your application and rewrite their load commands to be @executable_path relative. The end result is that your application is going to be completely standalone beyond a default install of Mac OS X. You no longer have to worry about linking all of your dependencies statically, usinginstall_name_tool, etc. It's all taken care of!

modulegraph:

A replacement for the Python standard library modulefinder. Stores the module dependency tree in a graph data structure and allows for advanced filtering and analysis capabilities, such as GraphViz dot output. This is used internally by py2app, but the code should be completely cross-platform. It is hoped that this package will be adopted by application packaging software for other platforms in the future, such as py2exe and cx_Freeze.

altgraph:

This is a fork of Istvan Albert's graphlib, and it used internally by both macholib and modulegraph. It contains several small feature and performance enhancements over the original graphlib.

License

Any components of the py2app suite may be distributed under the MIT or PSF open source licenses.

Downloads

Note that the installer for PyObjC 1.2 ships with py2app 0.1.7.

An installer for py2app 0.1.8 may be downloaded from:

The source to py2app 0.1.8 may be downloaded here:

py2app maintains a public subversion source code repository currently located at:

As of version 0.1.6, py2app uses the extra_path feature of distutils, which changes the installation layout. If you have py2app 0.1.5 or earlier installed, you must manually remove the following directories from your site-packages directory (probably /Library/Python/2.3) if they exist before upgrading:

py2app Documentation

#!/usr/bin/env python
"""
setup.py - script for building MyApplication
Usage:
% python setup.py py2app
"""
from distutils.core import setup
import py2app
setup(
app=['MyApplication.py'],
)
When running this script as directed, py2app will do the following:

#!/usr/bin/env python
"""
setup.py - script for building MyApplication
"""
from distutils.core import setup
import py2app

Note that you must replace hypens '-' with underscores '_'

when converting option names from the command line to a script.

For example, the --argv-emulation option is passed as

argv_emulation in an options dict.

py2app_options = dict(
# Map "open document" events to sys.argv.
# Scripts that expect files as command line arguments
# can be trivially used as "droplets" using this option.
# Without this option, sys.argv should not be used at all
# as it will contain only Mac OS X specific stuff.
argv_emulation=True,
# This is a shortcut that will place MyApplication.icns
# in the Contents/Resources folder of the application bundle,
# and make sure the CFBundleIcon plist key is set appropriately.
iconfile='MyApplication.icns',
)
setup(
app=['MyApplication.py'],
options=dict(
# Each command is allowed to have its own
# options, so we must specify that these
# options are py2app specific.
py2app=py2app_options,
)
)

"""
setup.py - workaround for wxPython 2.4.x

Usage:
% python setup.py py2app
"""
from distutils.core import setup
import py2app
setup(
app=['test.py'],
data_files=[('../Frameworks', [
'/usr/local/lib/libwx_mac-2.4.0.rsrc',
]
)],
)

bdist_mpkg Documentation