Create standalone Mac OS X applications with Python
Project description
py2app is a Python setuptools command which will allow
you to make standalone Mac OS X application bundles
and plugins from Python scripts.
py2app is similar in purpose and design to py2exe for
Windows.
NEWS
====
py2app 0.5.1
------------
py2app 0.5.1 is a bugfix release
Bug fixes:
- Ensure stub executables get included in the egg files
- Fix name of the bundletemplate stub executable for 32-bit builds
py2app 0.5
----------
py2app 0.5 is a minor feature release.
Features:
- Add support for the ``--with-framework-name`` option of Python's
configure script, that is: py2app now also works when the Python
framework is not named 'Python.framework'.
- Add support for various build flavours of Python (32bit, 3-way, ...)
- py2app now actually works for me (ronaldoussoren@mac.com) with a
python interpreter in a virtualenv environment.
- Experimental support for python 3
Bug fixes:
- Fix recipe for matplotlib: that recipe caused an exception with
current versions of matplotlib and pytz.
- Use modern API's in the alias-build bootstrap code, without
this 'py2app -A' will result in broken bundles on a 64-bit build
of Python.
(Patch contributed by James R Eagan)
- Try both 'import Image' and 'from PIL import Image' in the PIL
recipe.
(Patch contributed by Christopher Barker)
- The stub executable now works for 64-bit application bundles
- (Lowlevel) The application stub was rewritten to use
``dlopen`` instead of ``dyld`` APIs. This removes deprecation
warnings during compilation.
py2app 0.4.3
------------
py2app 0.4.3 is a bugfix release
Bug fixes:
- A bad format string in build_app.py made it impossible to copy the
Python framework into an app bundle.
py2app 0.4.2
------------
py2app 0.4.2 is a minor feature release
Features:
- When the '--strip' option is specified we now also remove '.dSYM'
directories from the bundle.
- Remove dependency on a 'version.plist' file in the python framework
- A new recipe for `PyQt`_ 4.x. This recipe was donated by Kevin Walzer.
- A new recipe for `virtualenv`_, this allows you to use py2app from
a virtual environment.
- Adds support for converting ``.xib`` files (NIB files for
Interface Builder 3)
- Introduces an experimental plugin API for data converters.
A conversion plugin should be defined as an entry-point in the
``py2app.converter`` group::
setup(
...
entry_points = {
'py2app.converter': [
"label = some_module:converter_function",
]
},
...
)
The conversion function should be defined like this::
from py2app.decorators import converts
@converts('.png')
def optimze_png(source, proposed_destionation, dryrun=0):
# Copy 'source' to 'proposed_destination'
# The conversion is allowed to change the proposed
# destination to another name in the same directory.
pass
.. `virtualenv`_: http://pypi.python.org/pypi/virtualenv
Buf fixes:
- This fixes an issue with copying a different version of Python over
to an app/plugin bundle than the one used to run py2app with.
py2app 0.4.0
------------
py2app 0.4.0 is a minor feature release (and was never formally released).
Features:
- Support for CoreData mapping models (introduced in Mac OS X 10.5)
- Support for python packages that are stored in zipfiles (such as ``zip_safe``
python eggs).
Bug fixes:
- Fix incorrect symlink target creation with an alias bundle that has included
frameworks.
- Stuffit tends to extract archives recursively, which results in unzipped
code archives inside py2app-created bundles. This version has a workaround
for this "feature" for Stuffit.
- Be more carefull about passing non-constant strings as the template argumenti
of string formatting functions (in the app and bundle templates), to avoid
crashes under some conditions.
py2app 0.3.6
------------
py2app 0.3.6 is a minor bugfix release.
Bug fixes:
- Ensure that custom icons are copied into the output bundle
- Solve compatibility problem with some haxies and inputmanager plugins
py2app 0.3.5
------------
py2app 0.3.5 is a minor bugfix release.
Bug fixes:
- Resolve disable_linecache issue
- Fix Info.plist and Python path for plugins
py2app 0.3.4
------------
py2app 0.3.4 is a minor bugfix release.
Bug fixes:
- Fixed a typo in the py2applet script
- Removed some, but not all, compiler warnings from the bundle template
(which is still probably broken anyway)
py2app 0.3.3
------------
py2app 0.3.3 is a minor bugfix release.
Bug Fixes:
- Fixed a typo in the argv emulation code
- Removed the unnecessary py2app.install hack (setuptools does that already)
py2app 0.3.2
------------
py2app 0.3.2 is a major bugfix release.
Functional changes:
- Massively updated documentation
- New prefer-ppc option
- New recipes: numpy, scipy, matplotlib
- Updated py2applet script to take options, provide --make-setup
Bug Fixes:
- No longer defaults to LSPrefersPPC
- Replaced stdlib usage of argvemulator to inline version for i386
compatibility
py2app 0.3.1
------------
py2app 0.3.1 is a minor bugfix release.
Functional changes:
- New EggInstaller example
Bug Fixes:
- Now ensures that the executable is +x (when installed from egg this may not
be the case)
py2app 0.3.0
------------
py2app 0.3.0 is a major feature enhancements release.
Functional changes:
- New --xref (-x) option similar to py2exe's that produces
a list of modules and their interdependencies as a HTML
file
- sys.executable now points to a regular Python interpreter
alongside the regular executable, so spawning sub-interpreters
should work much more reliably
- Application bootstrap now detects paths containing ":"
and will provide a "friendly" error message instead of just
crashing <http://python.org/sf/1507224>.
- Application bootstrap now sets PYTHONHOME instead of
a large PYTHONPATH
- Application bootstrap rewritten in C that links to
CoreFoundation and Cocoa dynamically as needed,
so it doesn't imply any particular version of the runtime.
- Documentation and examples changed to use setuptools
instead of distutils.core, which removes the need for
the py2app import
- Refactored to use setuptools, distributed as an egg.
- macholib, bdist_mpkg, modulegraph, and altgraph are now
separately maintained packages available on PyPI as eggs
- macholib now supports little endian architectures,
64-bit Mach-O headers, and reading/writing of
multiple headers per file (fat / universal binaries)
py2app 0.2.1
------------
py2app 0.2.1 is a minor bug fix release.
Bug Fixes:
- macholib.util.in_system_path understands SDKs now
- DYLD_LIBRARY_PATH searching is fixed
- Frameworks and excludes options should work again.
py2app 0.2.0
------------
py2app 0.2.0 is a minor bug fix release.
Functional changes:
- New datamodels option to support CoreData. Compiles
.xcdatamodel files and places them in the Resources dir
(as .mom).
- New use-pythonpath option. The py2app application bootstrap
will no longer use entries from PYTHONPATH unless this option
is used.
- py2app now persists information about the build environment
(python version, executable, build style, etc.) in the
Info.plist and will clean the executable before rebuilding
if anything at all has changed.
- bdist_mpkg now builds packages with the full platform info,
so that installing a package for one platform combination
will not look like an upgrade to another platform combination.
Bug Fixes:
- Fixed a bug in standalone building, where a rebuild could
cause an unlaunchable executable.
- Plugin bootstrap should compile/link correctly
with gcc 4.
- Plugin bootstrap no longer sets PYTHONHOME and will
restore PYTHONPATH after initialization.
- Plugin bootstrap swaps out thread state upon plug-in
load if it is the first to initialize Python. This
fixes threading issues.
py2app 0.1.9
------------
py2app 0.1.9 is a minor bug fix release.
Bugs fixed:
- bdist_mpkg now builds zip files that are correctly unzipped
by all known tools.
- The behavior of the bootstrap has changed slightly such that
``__file__`` should now point to your main script, rather than
the bootstrap. The main script has also moved to ``Resources``,
from ``Resources/Python``, so that ``__file__`` relative resource
paths should still work.
py2app 0.1.8
------------
py2app 0.1.8 is a major enhancements release:
Bugs fixed:
- Symlinks in included frameworks should be preserved correctly
(fixes Tcl/Tk)
- Fixes some minor issues with alias bundles
- Removed implicit SpiderImagePlugin -> ImageTk reference in PIL
recipe
- The ``--optimize`` option should work now
- ``weakref`` is now included by default
- ``anydbm``'s dynamic dependencies are now in the standard implies
list
- Errors on app launch are brought to the front so the user does
not miss them
- bdist_mpkg now compatible with pychecker (data_files had issues)
Options changed:
- deprecated ``--strip``, it is now on by default
- new ``--no-strip`` option to turn off stripping of executables
New features:
- Looks for a hacked version of the PyOpenGL __init__.py so that
it doesn't have to include the whole package in order to get
at the stupid version file.
- New ``loader_files`` key that a recipe can return in order to
ensure that non-code ends up in the .zip (the pygame recipe
uses this)
- Now scans all files in the bundle and normalizes Mach-O load
commands, not just extensions. This helps out when using the
``--package`` option, when including frameworks that have plugins,
etc.
- An embedded Python interpreter is now included in the executable
bundle (``sys.executable`` points to it), this currently only
works for framework builds of Python
- New ``macho_standalone`` tool
- New ``macho_find`` tool
- Major enhancements to the way plugins are built
- bdist_mpkg now has a ``--zipdist`` option to build zip files
from the built package
- The bdist_mpkg "Installed to:" description is now based on the
package install root, rather than the build root
py2app 0.1.7
------------
`py2app`_ 0.1.7 is a bug fix release:
- The ``bdist_mpkg`` script will now set up sys.path properly, for setup scripts
that require local imports.
- ``bdist_mpkg`` will now correctly accept ``ReadMe``, ``License``, ``Welcome``,
and ``background`` files by parameter.
- ``bdist_mpkg`` can now display a custom background again (0.1.6 broke this).
- ``bdist_mpkg`` now accepts a ``build-base=`` argument, to put build files in
an alternate location.
- ``py2app`` will now accept main scripts with a ``.pyw`` extension.
- ``py2app``'s not_stdlib_filter will now ignore a ``site-python`` directory as
well as ``site-packages``.
- ``py2app``'s plugin bundle template no longer displays GUI dialogs by default,
but still links to ``AppKit``.
- ``py2app`` now ensures that the directory of the main script is now added to
``sys.path`` when scanning modules.
- The ``py2app`` build command has been refactored such that it would be easier
to change its behavior by subclassing.
- ``py2app`` alias bundles can now cope with editors that do atomic saves
(write new file, swap names with existing file).
- ``macholib`` now has minimal support for fat binaries. It still assumes big
endian and will not make any changes to a little endian header.
- Add a warning message when using the ``install`` command rather than installing
from a package.
- New ``simple/structured`` example that shows how you could package an
application that is organized into several folders.
- New ``PyObjC/pbplugin`` Xcode Plug-In example.
py2app 0.1.6
------------
Since I have been slacking and the last announcement was for 0.1.4, here are the
changes for the soft-launched releases 0.1.5 and 0.1.6:
`py2app`_ 0.1.6 was a major feature enhancements release:
- ``py2applet`` and ``bdist_mpkg`` scripts have been moved to Python modules
so that the functionality can be shared with the tools.
- Generic graph-related functionality from ``py2app`` was moved to
``altgraph.ObjectGraph`` and ``altgraph.GraphUtil``.
- ``bdist_mpkg`` now outputs more specific plist requirements
(for future compatibility).
- ``py2app`` can now create plugin bundles (MH_BUNDLE) as well as executables.
New recipe for supporting extensions built with `sip`_, such as `PyQt`_. Note that
due to the way that `sip`_ works, when one sip-based extension is used, *all*
sip-based extensions are included in your application. In practice, this means
anything provided by `Riverbank`_, I don't think anyone else uses `sip`_ (publicly).
- New recipe for `PyOpenGL`_. This is very naive and simply includes the whole
thing, rather than trying to monkeypatch their brain-dead
version acquisition routine in ``__init__``.
- Bootstrap now sets ``ARGVZERO`` and ``EXECUTABLEPATH`` environment variables,
corresponding to the ``argv[0]`` and the ``_NSGetExecutablePath(...)`` that the
bundle saw. This is only really useful if you need to relaunch your own
application.
- More correct ``dyld`` search behavior.
- Refactored ``macholib`` to use ``altgraph``, can now generate `GraphViz`_ graphs
and more complex analysis of dependencies can be done.
- ``macholib`` was refactored to be easier to maintain, and the structure handling
has been optimized a bit.
- The few tests that there are were refactored in `py.test`_ style.
- New `PyQt`_ example.
- New `PyOpenGL`_ example.
See also:
- http://mail.python.org/pipermail/pythonmac-sig/2004-December/012272.html
.. _`py.test`: http://codespeak.net/py/current/doc/test.html
.. _`PyOpenGL`: http://pyopengl.sourceforge.net/
.. _`Riverbank`: http://www.riverbankcomputing.co.uk/
.. _`sip`: http://www.riverbankcomputing.co.uk/sip/index.php
.. _`PyQt`: http://www.riverbankcomputing.co.uk/pyqt/index.php
.. _`docutils`: http://docutils.sf.net/
.. _`setuptools`: http://cvs.eby-sarna.com/PEAK/setuptools/
py2app 0.1.5
------------
`py2app`_ 0.1.5 is a major feature enhancements release:
- Added a ``bdist_mpkg`` distutils extension, for creating Installer
an metapackage from any distutils script.
- Includes PackageInstaller tool
- bdist_mpkg script
- setup.py enhancements to support bdist_mpkg functionality
- Added a ``PackageInstaller`` tool, a droplet that performs the same function
as the ``bdist_mpkg`` script.
- Create a custom ``bdist_mpkg`` subclass for `py2app`_'s setup script.
- Source package now includes `PJE`_'s `setuptools`_ extension to distutils.
- Added lots of metadata to the setup script.
- ``py2app.modulegraph`` is now a top-level package, ``modulegraph``.
- ``py2app.find_modules`` is now ``modulegraph.find_modules``.
- Should now correctly handle paths (and application names) with unicode characters
in them.
- New ``--strip`` option for ``py2app`` build command, strips all Mach-O files
in output application bundle.
- New ``--bdist-base=`` option for ``py2app`` build command, allows an alternate
build directory to be specified.
- New `docutils`_ recipe.
Support for non-framework Python, such as the one provided by `DarwinPorts`_.
See also:
- http://mail.python.org/pipermail/pythonmac-sig/2004-October/011933.html
.. _`py.test`: http://codespeak.net/py/current/doc/test.html
.. _`GraphViz`: http://www.pixelglow.com/graphviz/
.. _`PyOpenGL`: http://pyopengl.sourceforge.net/
.. _`Riverbank`: http://www.riverbankcomputing.co.uk/
.. _`sip`: http://www.riverbankcomputing.co.uk/sip/index.php
.. _`PyQt`: http://www.riverbankcomputing.co.uk/pyqt/index.php
.. _`DarwinPorts`: http://darwinports.opendarwin.org/
.. _`docutils`: http://docutils.sourceforge.net/
.. _`setuptools`: http://cvs.eby-sarna.com/PEAK/setuptools/
.. _`PJE`: http://dirtSimple.org/
.. _`PyObjC`: http://pyobjc.sourceforge.net/
py2app 0.1.4
------------
`py2app`_ 0.1.4 is a minor bugfix release:
- The ``altgraph`` from 0.1.3 had a pretty nasty bug in it that prevented
filtering from working properly, so I fixed it and bumped to 0.1.4.
py2app 0.1.3
------------
`py2app`_ 0.1.3 is a refactoring and new features release:
- ``altgraph``, my fork of Istvan Albert's `graphlib`_, is now part of the
distribution
- ``py2app.modulegraph`` has been refactored to use ``altgraph``
- `py2app`_ can now create `GraphViz`_ DOT graphs with the ``-g`` option
(`TinyTinyEdit example`_)
- Moved the filter stack into ``py2app.modulegraph``
- Fixed a bug that may have been in 0.1.2 where explicitly included packages
would not be scanned by ``macholib``
- ``py2app.apptemplate`` now contains a stripped down ``site`` module as
opposed to a ``sitecustomize``
- Alias builds are now the only ones that contain the system and user
``site-packages`` directory in ``sys.path``
- The ``pydoc`` recipe has been beefed up to also exclude ``BaseHTTPServer``,
etc.
Known issues:
- Commands marked with XXX in the help are not implemented
- Includes *all* files from packages, it should be smart enough to strip
unused .py/.pyc/.pyo files (to save space, depending on which optimization
flag is used)
- ``macholib`` should be refactored to use ``altgraph``
- ``py2app.build_app`` and ``py2app.modulegraph`` should be refactored to
search for dependencies on a per-application basis
.. _`graphlib`: http://www.personal.psu.edu/staff/i/u/iua1/python/graphlib/html/
.. _`GraphViz`: http://www.research.att.com/sw/tools/graphviz/
.. _`TinyTinyEdit example`: http://undefined.org/~bob/TinyTinyEdit.pdf
py2app 0.1.2
------------
`py2app`_ 0.2 is primarily a bugfix release:
- The encodings package now gets included in the zip file (saves space)
- A copy of the Python interpreter is not included anymore in standalone
builds (saves space)
- The executable bootstrap is now stripped by default (saves a little space)
- ``sys.argv`` is set correctly now, it used to point to the executable, now
it points to the boot script. This should enhance compatibility with some
applications.
- Adds an "Alias" feature to modulegraph, so that ``sys.modules`` craziness
such as ``wxPython.wx -> wx`` can be accomodated (this particular craziness
is also now handled by default)
- A ``sys.path`` alternative may be passed to ``find_modules`` now, though
this is not used yet
- The ``Command`` instance is now passed to recipes instead of the
``Distribution`` instance (though no recipes currently use either)
- The post-filtering of modules and extensions is now generalized into a
stack and can be modified by recipes
- A `wxPython`_ example demonstrating how to package `wxGlade`_ has been
added (this is a good example of how to write your own recipe, and how to
deal with complex applications that mix code and data files)
- ``PyRuntimeLocations`` is now set to (only) the location of the current
interpreter's ``Python.framework`` for alias and semi-standalone build
modes (enhances compatibility with extensions built with an unpatched
Makefile with Mac OS X 10.3's Python 2.3.0)
Known issues:
- Includes *all* files from packages, it should be smart enough to strip
unused .py/.pyc/.pyo files (to save space, depending on which optimization
flag is used).
.. _`wxGlade`: http://wxglade.sourceforge.net/
py2app 0.1.1
------------
`py2app`_ 0.1.1 is primarily a bugfix release:
- Several problems related to Mac OS X 10.2 compatibility and standalone
building have been resolved
- Scripts that are not in the same directory as setup.py now work
- A new recipe has been added that removes the pydoc -> Tkinter dependency
- A recipe has been added for `py2app`_ itself
- a `wxPython`_ example (superdoodle) has been added.
Demonstrates not only how easy it is (finally!) to bundle
`wxPython`_ applications, but also how one setup.py can
deal with both `py2exe`_ and `py2app`_.
- A new experimental tool, py2applet, has been added.
Once you've built it (``python setup.py py2app``, of course), you should
be able to build simple applications simply by dragging your main script
and optionally any packages, data files, Info.plist and icon it needs.
Known issues:
- Includes *all* files from packages, it should be smart enough to strip
unused .py/.pyc/.pyo files (to save space, depending on which
optimization flag is used).
- The default ``PyRuntimeLocations`` can cause problems on machines that
have a /Library/Frameworks/Python.framework installed. Workaround is
to set a plist that has the following key:
``PyRuntimeLocations=['/System/Library/Frameworks/Python.framework/Versions/2.3/Python']``
(this will be resolved soon)
py2app 0.1
----------
(first public release)
`py2app`_ is the bundlebuilder replacement we've all been waiting
for. It is implemented as a distutils command, similar to `py2exe`_.
.. _`wxPython`: http://www.wxpython.org/
.. _`py2app`: http://undefined.org/python/#py2app
.. _`py2exe`: http://starship.python.net/crew/theller/py2exe/
you to make standalone Mac OS X application bundles
and plugins from Python scripts.
py2app is similar in purpose and design to py2exe for
Windows.
NEWS
====
py2app 0.5.1
------------
py2app 0.5.1 is a bugfix release
Bug fixes:
- Ensure stub executables get included in the egg files
- Fix name of the bundletemplate stub executable for 32-bit builds
py2app 0.5
----------
py2app 0.5 is a minor feature release.
Features:
- Add support for the ``--with-framework-name`` option of Python's
configure script, that is: py2app now also works when the Python
framework is not named 'Python.framework'.
- Add support for various build flavours of Python (32bit, 3-way, ...)
- py2app now actually works for me (ronaldoussoren@mac.com) with a
python interpreter in a virtualenv environment.
- Experimental support for python 3
Bug fixes:
- Fix recipe for matplotlib: that recipe caused an exception with
current versions of matplotlib and pytz.
- Use modern API's in the alias-build bootstrap code, without
this 'py2app -A' will result in broken bundles on a 64-bit build
of Python.
(Patch contributed by James R Eagan)
- Try both 'import Image' and 'from PIL import Image' in the PIL
recipe.
(Patch contributed by Christopher Barker)
- The stub executable now works for 64-bit application bundles
- (Lowlevel) The application stub was rewritten to use
``dlopen`` instead of ``dyld`` APIs. This removes deprecation
warnings during compilation.
py2app 0.4.3
------------
py2app 0.4.3 is a bugfix release
Bug fixes:
- A bad format string in build_app.py made it impossible to copy the
Python framework into an app bundle.
py2app 0.4.2
------------
py2app 0.4.2 is a minor feature release
Features:
- When the '--strip' option is specified we now also remove '.dSYM'
directories from the bundle.
- Remove dependency on a 'version.plist' file in the python framework
- A new recipe for `PyQt`_ 4.x. This recipe was donated by Kevin Walzer.
- A new recipe for `virtualenv`_, this allows you to use py2app from
a virtual environment.
- Adds support for converting ``.xib`` files (NIB files for
Interface Builder 3)
- Introduces an experimental plugin API for data converters.
A conversion plugin should be defined as an entry-point in the
``py2app.converter`` group::
setup(
...
entry_points = {
'py2app.converter': [
"label = some_module:converter_function",
]
},
...
)
The conversion function should be defined like this::
from py2app.decorators import converts
@converts('.png')
def optimze_png(source, proposed_destionation, dryrun=0):
# Copy 'source' to 'proposed_destination'
# The conversion is allowed to change the proposed
# destination to another name in the same directory.
pass
.. `virtualenv`_: http://pypi.python.org/pypi/virtualenv
Buf fixes:
- This fixes an issue with copying a different version of Python over
to an app/plugin bundle than the one used to run py2app with.
py2app 0.4.0
------------
py2app 0.4.0 is a minor feature release (and was never formally released).
Features:
- Support for CoreData mapping models (introduced in Mac OS X 10.5)
- Support for python packages that are stored in zipfiles (such as ``zip_safe``
python eggs).
Bug fixes:
- Fix incorrect symlink target creation with an alias bundle that has included
frameworks.
- Stuffit tends to extract archives recursively, which results in unzipped
code archives inside py2app-created bundles. This version has a workaround
for this "feature" for Stuffit.
- Be more carefull about passing non-constant strings as the template argumenti
of string formatting functions (in the app and bundle templates), to avoid
crashes under some conditions.
py2app 0.3.6
------------
py2app 0.3.6 is a minor bugfix release.
Bug fixes:
- Ensure that custom icons are copied into the output bundle
- Solve compatibility problem with some haxies and inputmanager plugins
py2app 0.3.5
------------
py2app 0.3.5 is a minor bugfix release.
Bug fixes:
- Resolve disable_linecache issue
- Fix Info.plist and Python path for plugins
py2app 0.3.4
------------
py2app 0.3.4 is a minor bugfix release.
Bug fixes:
- Fixed a typo in the py2applet script
- Removed some, but not all, compiler warnings from the bundle template
(which is still probably broken anyway)
py2app 0.3.3
------------
py2app 0.3.3 is a minor bugfix release.
Bug Fixes:
- Fixed a typo in the argv emulation code
- Removed the unnecessary py2app.install hack (setuptools does that already)
py2app 0.3.2
------------
py2app 0.3.2 is a major bugfix release.
Functional changes:
- Massively updated documentation
- New prefer-ppc option
- New recipes: numpy, scipy, matplotlib
- Updated py2applet script to take options, provide --make-setup
Bug Fixes:
- No longer defaults to LSPrefersPPC
- Replaced stdlib usage of argvemulator to inline version for i386
compatibility
py2app 0.3.1
------------
py2app 0.3.1 is a minor bugfix release.
Functional changes:
- New EggInstaller example
Bug Fixes:
- Now ensures that the executable is +x (when installed from egg this may not
be the case)
py2app 0.3.0
------------
py2app 0.3.0 is a major feature enhancements release.
Functional changes:
- New --xref (-x) option similar to py2exe's that produces
a list of modules and their interdependencies as a HTML
file
- sys.executable now points to a regular Python interpreter
alongside the regular executable, so spawning sub-interpreters
should work much more reliably
- Application bootstrap now detects paths containing ":"
and will provide a "friendly" error message instead of just
crashing <http://python.org/sf/1507224>.
- Application bootstrap now sets PYTHONHOME instead of
a large PYTHONPATH
- Application bootstrap rewritten in C that links to
CoreFoundation and Cocoa dynamically as needed,
so it doesn't imply any particular version of the runtime.
- Documentation and examples changed to use setuptools
instead of distutils.core, which removes the need for
the py2app import
- Refactored to use setuptools, distributed as an egg.
- macholib, bdist_mpkg, modulegraph, and altgraph are now
separately maintained packages available on PyPI as eggs
- macholib now supports little endian architectures,
64-bit Mach-O headers, and reading/writing of
multiple headers per file (fat / universal binaries)
py2app 0.2.1
------------
py2app 0.2.1 is a minor bug fix release.
Bug Fixes:
- macholib.util.in_system_path understands SDKs now
- DYLD_LIBRARY_PATH searching is fixed
- Frameworks and excludes options should work again.
py2app 0.2.0
------------
py2app 0.2.0 is a minor bug fix release.
Functional changes:
- New datamodels option to support CoreData. Compiles
.xcdatamodel files and places them in the Resources dir
(as .mom).
- New use-pythonpath option. The py2app application bootstrap
will no longer use entries from PYTHONPATH unless this option
is used.
- py2app now persists information about the build environment
(python version, executable, build style, etc.) in the
Info.plist and will clean the executable before rebuilding
if anything at all has changed.
- bdist_mpkg now builds packages with the full platform info,
so that installing a package for one platform combination
will not look like an upgrade to another platform combination.
Bug Fixes:
- Fixed a bug in standalone building, where a rebuild could
cause an unlaunchable executable.
- Plugin bootstrap should compile/link correctly
with gcc 4.
- Plugin bootstrap no longer sets PYTHONHOME and will
restore PYTHONPATH after initialization.
- Plugin bootstrap swaps out thread state upon plug-in
load if it is the first to initialize Python. This
fixes threading issues.
py2app 0.1.9
------------
py2app 0.1.9 is a minor bug fix release.
Bugs fixed:
- bdist_mpkg now builds zip files that are correctly unzipped
by all known tools.
- The behavior of the bootstrap has changed slightly such that
``__file__`` should now point to your main script, rather than
the bootstrap. The main script has also moved to ``Resources``,
from ``Resources/Python``, so that ``__file__`` relative resource
paths should still work.
py2app 0.1.8
------------
py2app 0.1.8 is a major enhancements release:
Bugs fixed:
- Symlinks in included frameworks should be preserved correctly
(fixes Tcl/Tk)
- Fixes some minor issues with alias bundles
- Removed implicit SpiderImagePlugin -> ImageTk reference in PIL
recipe
- The ``--optimize`` option should work now
- ``weakref`` is now included by default
- ``anydbm``'s dynamic dependencies are now in the standard implies
list
- Errors on app launch are brought to the front so the user does
not miss them
- bdist_mpkg now compatible with pychecker (data_files had issues)
Options changed:
- deprecated ``--strip``, it is now on by default
- new ``--no-strip`` option to turn off stripping of executables
New features:
- Looks for a hacked version of the PyOpenGL __init__.py so that
it doesn't have to include the whole package in order to get
at the stupid version file.
- New ``loader_files`` key that a recipe can return in order to
ensure that non-code ends up in the .zip (the pygame recipe
uses this)
- Now scans all files in the bundle and normalizes Mach-O load
commands, not just extensions. This helps out when using the
``--package`` option, when including frameworks that have plugins,
etc.
- An embedded Python interpreter is now included in the executable
bundle (``sys.executable`` points to it), this currently only
works for framework builds of Python
- New ``macho_standalone`` tool
- New ``macho_find`` tool
- Major enhancements to the way plugins are built
- bdist_mpkg now has a ``--zipdist`` option to build zip files
from the built package
- The bdist_mpkg "Installed to:" description is now based on the
package install root, rather than the build root
py2app 0.1.7
------------
`py2app`_ 0.1.7 is a bug fix release:
- The ``bdist_mpkg`` script will now set up sys.path properly, for setup scripts
that require local imports.
- ``bdist_mpkg`` will now correctly accept ``ReadMe``, ``License``, ``Welcome``,
and ``background`` files by parameter.
- ``bdist_mpkg`` can now display a custom background again (0.1.6 broke this).
- ``bdist_mpkg`` now accepts a ``build-base=`` argument, to put build files in
an alternate location.
- ``py2app`` will now accept main scripts with a ``.pyw`` extension.
- ``py2app``'s not_stdlib_filter will now ignore a ``site-python`` directory as
well as ``site-packages``.
- ``py2app``'s plugin bundle template no longer displays GUI dialogs by default,
but still links to ``AppKit``.
- ``py2app`` now ensures that the directory of the main script is now added to
``sys.path`` when scanning modules.
- The ``py2app`` build command has been refactored such that it would be easier
to change its behavior by subclassing.
- ``py2app`` alias bundles can now cope with editors that do atomic saves
(write new file, swap names with existing file).
- ``macholib`` now has minimal support for fat binaries. It still assumes big
endian and will not make any changes to a little endian header.
- Add a warning message when using the ``install`` command rather than installing
from a package.
- New ``simple/structured`` example that shows how you could package an
application that is organized into several folders.
- New ``PyObjC/pbplugin`` Xcode Plug-In example.
py2app 0.1.6
------------
Since I have been slacking and the last announcement was for 0.1.4, here are the
changes for the soft-launched releases 0.1.5 and 0.1.6:
`py2app`_ 0.1.6 was a major feature enhancements release:
- ``py2applet`` and ``bdist_mpkg`` scripts have been moved to Python modules
so that the functionality can be shared with the tools.
- Generic graph-related functionality from ``py2app`` was moved to
``altgraph.ObjectGraph`` and ``altgraph.GraphUtil``.
- ``bdist_mpkg`` now outputs more specific plist requirements
(for future compatibility).
- ``py2app`` can now create plugin bundles (MH_BUNDLE) as well as executables.
New recipe for supporting extensions built with `sip`_, such as `PyQt`_. Note that
due to the way that `sip`_ works, when one sip-based extension is used, *all*
sip-based extensions are included in your application. In practice, this means
anything provided by `Riverbank`_, I don't think anyone else uses `sip`_ (publicly).
- New recipe for `PyOpenGL`_. This is very naive and simply includes the whole
thing, rather than trying to monkeypatch their brain-dead
version acquisition routine in ``__init__``.
- Bootstrap now sets ``ARGVZERO`` and ``EXECUTABLEPATH`` environment variables,
corresponding to the ``argv[0]`` and the ``_NSGetExecutablePath(...)`` that the
bundle saw. This is only really useful if you need to relaunch your own
application.
- More correct ``dyld`` search behavior.
- Refactored ``macholib`` to use ``altgraph``, can now generate `GraphViz`_ graphs
and more complex analysis of dependencies can be done.
- ``macholib`` was refactored to be easier to maintain, and the structure handling
has been optimized a bit.
- The few tests that there are were refactored in `py.test`_ style.
- New `PyQt`_ example.
- New `PyOpenGL`_ example.
See also:
- http://mail.python.org/pipermail/pythonmac-sig/2004-December/012272.html
.. _`py.test`: http://codespeak.net/py/current/doc/test.html
.. _`PyOpenGL`: http://pyopengl.sourceforge.net/
.. _`Riverbank`: http://www.riverbankcomputing.co.uk/
.. _`sip`: http://www.riverbankcomputing.co.uk/sip/index.php
.. _`PyQt`: http://www.riverbankcomputing.co.uk/pyqt/index.php
.. _`docutils`: http://docutils.sf.net/
.. _`setuptools`: http://cvs.eby-sarna.com/PEAK/setuptools/
py2app 0.1.5
------------
`py2app`_ 0.1.5 is a major feature enhancements release:
- Added a ``bdist_mpkg`` distutils extension, for creating Installer
an metapackage from any distutils script.
- Includes PackageInstaller tool
- bdist_mpkg script
- setup.py enhancements to support bdist_mpkg functionality
- Added a ``PackageInstaller`` tool, a droplet that performs the same function
as the ``bdist_mpkg`` script.
- Create a custom ``bdist_mpkg`` subclass for `py2app`_'s setup script.
- Source package now includes `PJE`_'s `setuptools`_ extension to distutils.
- Added lots of metadata to the setup script.
- ``py2app.modulegraph`` is now a top-level package, ``modulegraph``.
- ``py2app.find_modules`` is now ``modulegraph.find_modules``.
- Should now correctly handle paths (and application names) with unicode characters
in them.
- New ``--strip`` option for ``py2app`` build command, strips all Mach-O files
in output application bundle.
- New ``--bdist-base=`` option for ``py2app`` build command, allows an alternate
build directory to be specified.
- New `docutils`_ recipe.
Support for non-framework Python, such as the one provided by `DarwinPorts`_.
See also:
- http://mail.python.org/pipermail/pythonmac-sig/2004-October/011933.html
.. _`py.test`: http://codespeak.net/py/current/doc/test.html
.. _`GraphViz`: http://www.pixelglow.com/graphviz/
.. _`PyOpenGL`: http://pyopengl.sourceforge.net/
.. _`Riverbank`: http://www.riverbankcomputing.co.uk/
.. _`sip`: http://www.riverbankcomputing.co.uk/sip/index.php
.. _`PyQt`: http://www.riverbankcomputing.co.uk/pyqt/index.php
.. _`DarwinPorts`: http://darwinports.opendarwin.org/
.. _`docutils`: http://docutils.sourceforge.net/
.. _`setuptools`: http://cvs.eby-sarna.com/PEAK/setuptools/
.. _`PJE`: http://dirtSimple.org/
.. _`PyObjC`: http://pyobjc.sourceforge.net/
py2app 0.1.4
------------
`py2app`_ 0.1.4 is a minor bugfix release:
- The ``altgraph`` from 0.1.3 had a pretty nasty bug in it that prevented
filtering from working properly, so I fixed it and bumped to 0.1.4.
py2app 0.1.3
------------
`py2app`_ 0.1.3 is a refactoring and new features release:
- ``altgraph``, my fork of Istvan Albert's `graphlib`_, is now part of the
distribution
- ``py2app.modulegraph`` has been refactored to use ``altgraph``
- `py2app`_ can now create `GraphViz`_ DOT graphs with the ``-g`` option
(`TinyTinyEdit example`_)
- Moved the filter stack into ``py2app.modulegraph``
- Fixed a bug that may have been in 0.1.2 where explicitly included packages
would not be scanned by ``macholib``
- ``py2app.apptemplate`` now contains a stripped down ``site`` module as
opposed to a ``sitecustomize``
- Alias builds are now the only ones that contain the system and user
``site-packages`` directory in ``sys.path``
- The ``pydoc`` recipe has been beefed up to also exclude ``BaseHTTPServer``,
etc.
Known issues:
- Commands marked with XXX in the help are not implemented
- Includes *all* files from packages, it should be smart enough to strip
unused .py/.pyc/.pyo files (to save space, depending on which optimization
flag is used)
- ``macholib`` should be refactored to use ``altgraph``
- ``py2app.build_app`` and ``py2app.modulegraph`` should be refactored to
search for dependencies on a per-application basis
.. _`graphlib`: http://www.personal.psu.edu/staff/i/u/iua1/python/graphlib/html/
.. _`GraphViz`: http://www.research.att.com/sw/tools/graphviz/
.. _`TinyTinyEdit example`: http://undefined.org/~bob/TinyTinyEdit.pdf
py2app 0.1.2
------------
`py2app`_ 0.2 is primarily a bugfix release:
- The encodings package now gets included in the zip file (saves space)
- A copy of the Python interpreter is not included anymore in standalone
builds (saves space)
- The executable bootstrap is now stripped by default (saves a little space)
- ``sys.argv`` is set correctly now, it used to point to the executable, now
it points to the boot script. This should enhance compatibility with some
applications.
- Adds an "Alias" feature to modulegraph, so that ``sys.modules`` craziness
such as ``wxPython.wx -> wx`` can be accomodated (this particular craziness
is also now handled by default)
- A ``sys.path`` alternative may be passed to ``find_modules`` now, though
this is not used yet
- The ``Command`` instance is now passed to recipes instead of the
``Distribution`` instance (though no recipes currently use either)
- The post-filtering of modules and extensions is now generalized into a
stack and can be modified by recipes
- A `wxPython`_ example demonstrating how to package `wxGlade`_ has been
added (this is a good example of how to write your own recipe, and how to
deal with complex applications that mix code and data files)
- ``PyRuntimeLocations`` is now set to (only) the location of the current
interpreter's ``Python.framework`` for alias and semi-standalone build
modes (enhances compatibility with extensions built with an unpatched
Makefile with Mac OS X 10.3's Python 2.3.0)
Known issues:
- Includes *all* files from packages, it should be smart enough to strip
unused .py/.pyc/.pyo files (to save space, depending on which optimization
flag is used).
.. _`wxGlade`: http://wxglade.sourceforge.net/
py2app 0.1.1
------------
`py2app`_ 0.1.1 is primarily a bugfix release:
- Several problems related to Mac OS X 10.2 compatibility and standalone
building have been resolved
- Scripts that are not in the same directory as setup.py now work
- A new recipe has been added that removes the pydoc -> Tkinter dependency
- A recipe has been added for `py2app`_ itself
- a `wxPython`_ example (superdoodle) has been added.
Demonstrates not only how easy it is (finally!) to bundle
`wxPython`_ applications, but also how one setup.py can
deal with both `py2exe`_ and `py2app`_.
- A new experimental tool, py2applet, has been added.
Once you've built it (``python setup.py py2app``, of course), you should
be able to build simple applications simply by dragging your main script
and optionally any packages, data files, Info.plist and icon it needs.
Known issues:
- Includes *all* files from packages, it should be smart enough to strip
unused .py/.pyc/.pyo files (to save space, depending on which
optimization flag is used).
- The default ``PyRuntimeLocations`` can cause problems on machines that
have a /Library/Frameworks/Python.framework installed. Workaround is
to set a plist that has the following key:
``PyRuntimeLocations=['/System/Library/Frameworks/Python.framework/Versions/2.3/Python']``
(this will be resolved soon)
py2app 0.1
----------
(first public release)
`py2app`_ is the bundlebuilder replacement we've all been waiting
for. It is implemented as a distutils command, similar to `py2exe`_.
.. _`wxPython`: http://www.wxpython.org/
.. _`py2app`: http://undefined.org/python/#py2app
.. _`py2exe`: http://starship.python.net/crew/theller/py2exe/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
py2app-0.5.1.tar.gz
(493.8 kB
view hashes)
Built Distributions
py2app-0.5.1-py3.2.egg
(354.1 kB
view hashes)
py2app-0.5.1-py3.1.egg
(312.8 kB
view hashes)
py2app-0.5.1-py2.7.egg
(353.1 kB
view hashes)
py2app-0.5.1-py2.6.egg
(353.5 kB
view hashes)
py2app-0.5.1-py2.5.egg
(353.7 kB
view hashes)