issue #146, #147: The “python” binary in MyApp.app/Contents/MacOS was the small stub exetable from framework builds, instead of the actual command-line interpreter. The result is that you couldn’t use sys.executable to start a new interpreter, which (amongst others) breaks multiprocessing.
pull request #7: Add support for PyQt5 to the sip recipe. Patch by Mark Montague.
pull request #4: Copying PySide plugins was broken due to bad indentation.
pull request #5: py2app was broken for python versions that don’t use _sysconfigdata.
issue #135: Don’t sleep for a second after compiling a XIB file
issue #134: Remove target location before copying files into the bundle.
issue #133: Ensure that the application’s “Framework” folder is on the search path for ctypes.util.find_library.
issue #132: Depend on modulegraph 0.12 to avoid build errors when the python code contains references to compatibility modules that contain SyntaxErrors for the current python version.
Explicitly report modules that cannot be found at the end of the run (for non-alias builds)
Note: This is just a warning, missing modules are not necessarily a problem because modulegraph can detect imports for modules that aren’t used on OSX (for example)
Report modules that contain syntax errors at the end of the run (for non-alias builds)
Note: This is just a warning, syntax errors be valid when the dependency tree contains modules for the other major release of python (e.g a compat_py2 module that contains compatibility code for Python 2 and contains code that isn’t valid Python 3)
Loading scripts didn’t work when –no-chdir was used
Reported by Barry Scott in private mail.
py2app 0.8 is a feature release
Fixed argv emulator on OSX 10.9, the way the code detected that the application was launched through the Finder didn’t work on that OSX release.
The launcher binary is now linked with Cocoa, that should avoid some problems with sandboxed applications (in particular: standard open panels don’t seem to work properly in a sandboxed application when the main binary is not linked to AppKit)
Don’t copy Python’s Makefile, Setup file and the like into a bundle when sysconfig and distutils.sysconfig don’t need these files (basicly, when using any recent python version).
Fix some issues with virtualenv support:
Issue #92: Add option ‘–force-system-tk’ which ensures that the _tkinter extension (used by Tkinter) is linked against the Apple build of Tcl/Tk, even when it is linked to another framework in Python’s std. library.
This will cause a build error when tkinter is linked with a major version of Tcl/Tk that is not present in /System/Library/Frameworks.
Issue #80: Add support for copying system plugins into the application bundle.
Py2app now supports a new option include_plugins. The value of this is a list of paths to plugins that should be copied into the application bundle.
Items in the list are either paths, or a tuple with the plugin type and the path:
include_plugins=[
"MyPlugins/MyDocument.qlgenerator",
("SystemConfiguration", "MyPlugins/MyConfig.plugin"),
]
Py2app currently knows about the following plugin suffixes: .qlgenerator, .mdimporter, .xpc, .service, .prefPane, .iaplugin and .action. These plugins can be added without specifying the plugin type.
Issue #83: Setup.py now refuses to install when the current platform is not Mac OS X.
This makes it clear that the package is only supported on OSX and avoids confusing errors later on.
Issue #39: It is now possible to have subpackages on in the “packages” option of py2app.
Issue #37: Add recipe for pyEnchant
..note:
The recipe only works for installations of pyEnchant
where pyEnchant is stored in the installation (such
as the binary eggs on PyPI), not for installations
that either use the "PYENCHANT_LIBRARY_PATH" environment
variable or MacPorts.
Issue #90: Removed the ‘email’ recipe, but require a new enough version of modulegraph instead. Because of this py2app now requires modulegraph 0.11 or later.
Issue #77: the stdout/stderr streams of application and plugin bundles did not end up in Console.app on OSX 10.8 (as they do on earlier releases of OSX). This is due to a change in OSX.
With this version the application executable converts writes to the stdout and stderr streams to the ASL logging subsystem with the options needed to end up in the default view of Console.app.
NOTE: The stdout and stderr streams of plugin bundles are not redirected, as it is rather bad form to change the global environment of the host application.
The i386, x86_64 and intel stub binaries are now compiled with clang on OSX 10.8, instead of an older version of GCC. The other stub versions still are compiled on OSX 10.6.
Issue #111: The site.py generated by py2app now contains a USER_SITE variable (with a default value of None) because some software tries to import the value.
Py2app didn’t preserve timestamps for files copied into application bundles, and this can cause a bytecompiled file to appear older than the corresponding source file (for packages copied in the bundle using the ‘packages’ option).
Related to issue #101
Py2app also didn’t copy file permissions for files copied into application bundles, which isn’t a problem in general but did cause binaries to lose there executable permissions (as noted on Stackoverflow)
Issue #101: Set “PYTHONDONTWRITEBYTECODE” in the environment before calling Py_Initialize to ensure that the interpreter won’t try to write bytecode files (which can cause problems when using sandboxed applications).
Issue #105: py2app can now create app and plugin bundles when the main script has an encoding other than ASCII, in particular for Python 3.
Issue #106: Ensure that the PIL recipe works on Python 3. PIL itself isn’t ported yet, but Pillow does work with Python 3.
“python setup.py install” now fails unless the machine is running Mac OS X.
I’ve seen a number of reports of users that try to use py2app on Windows or Linux to build OSX applications. That doesn’t work, py2app now fails during installation do make this clear.
Disabled the ‘email’ recipe for python 3.x as it isn’t needed there.
Issue #91: Added a recipe for lxml <http://lxml.de/>, needed because lxml performs a number of imports from an extension and those cannot be detected automaticly by modulegraph.
Issue #94: The site-packages zipfile in the application bundle now contains zipfile entries for directories as well. This is needed to work around a bug in the zipimporter for Python 3.3: it won’t consider ‘pkg/foo.py’ to be in namespace package ‘pkg’ unless there is a zipfile entry for the ‘pkg’ folder (or there is a ‘pkg/__init__.py’ entry).
Issue #97: Fixes a problem with the pyside and sip recipes when the ‘qt_plugins’ option is used for ‘image_plugins’.
Issue #96: py2app should work with python 2.6 again (previous releases didn’t work due to using the sysconfig module introduced in python 2.7)
Issue #99: appstore requires a number of symlinks in embedded frameworks.
(Version 0.7 already added a link Python.frameworks/Versions/Current, this versions also adds Python.framework/Python and Python.framework/Resources with the value required by the appstore upload tool).
Py2app copied stdlib packages into the app bundle for semi-standalone builds when they are mentioned in the ‘–packages’ option (either explicitly or by a recipe). This was unintentional, semi-standlone builds should rely on the external Python framework for the stdlib.
Note
Because of this bug parts of the stdlib of /usr/bin/python could be copied into app bundles created with py2app.
py2app 0.7.3 is a bugfix release
Issue #82: Remove debug print statement from py2app.util.LOADER that caused problems with Python 3.
Issue #81: Py2app now fails with an error when trying to build a bundle for a unix-style shared library build of Python (--enable-shared) unless you are using a recent enough patchlevel of python (2.7.4, 3.2.3, 3.3.1, 3.4.0, all of them are not released yet).
The build failure was added to avoid a very confusing error when trying to start the generated application due to a bug in the way python reads the environment (for shared library builds on Mac OS X).
Py2app will also give an error message when the python binary does not have a shared library (or framework) at all.
Issue #87: Ignore ‘.git’ and ‘.hg’ directories while copying package data (‘.svn’ and ‘CVS’ were already ignored).
Issue #65: the fix in 0.7 to avoid copying a symlinked library twice caused problems for some users because only one of the file names ended up in the application bundle. This release ensures that both names exist (one as a symbolic name to the other).
Issue #88: Ensure that the fix for #65 won’t try to create a symlink that points to itself. This could for example occur with homebrew, where the exposed lib directory contains symlinks to a cellar, while tye install_name does mention the “public” lib directory:
$ ls -l /opt/homebrew/lib
...
libglib-2.0.0.dylib -> ../Cellar/glib/2.32.4/lib/libglib-2.0.0.dylib
...
$ otool -vL /opt/homebrew/lib/libglib-2.0.0.dylib
/opt/homebrew/lib/libglib-2.0.0.dylib:
/opt/homebrew/lib/libglib-2.0.0.dylib (compatibility version 3201.0.0, current version 3201.4.0)
time stamp 1 Thu Jan 1 01:00:01 1970
...
py2app 0.7.2 is a bugfix release
Issue #75: Don’t remove --dist-dir, but only remove the old version of the objects we’re trying to build (if that exists).
This once again makes it possible to have a number of setup.py files that build plugins into the same target folder (such as the plugins folder of an application)
Issue #78: Packages added using the --packages option didn’t end up on sys.path for semi-standalone applications.
Reported by Steve Strassmann
Issue #76: Semi-standalone packages using extensions modules coudn’t use extensions unless they also used the --site-packages option (and the extensions are in the site-packages directory).
Fixes some problems with PyQt and wxWidgets when using the system installation of Python.
Patch by Dan Horner.
It is currently not possible to use a subpackage (“foo.bar”) in the list of packages for the “packages” option. Py2app now explicitly checks for this and prints an error message instead of building an application that doesn’t work.
Issue: #39
py2app 0.7.1 is a bugfix release
Always include ‘pkg_resources’, this is needed to correctly work with setuptools namespace packages, the __init__.py files of those contain __import__('pkg_resources') and that call isn’t recognized as an import by the bytecode scanner.
Issue #67: py2applet didn’t work with python 3 due to the use of ‘raw_input’
Reported by Andrew Barnert.
Issue #68: the “extra-scripts” feature introduced in 0.7 couldn’t copy scripts that aren’t in the same directory as “setup.py”.
Reported by Andrew Barnert.
For semi-standalone applications the “lib-dynload” directory inside the application was not on “sys.path”, which resulted in launch failures when using an extension that is not in the stdlib.
Issue #70: application fails to launch when script uses Windows line endings
Reported by Luc Jean.
py2app 0.7 is a bugfix release
Issue #65: generated bundle would crash when two libraries linked to the same library using different names (one refering to the real name, the other to a symlink).
An example if this is an application using wxWidgets when wxWidgets is installed using homebrew.
Reported by “Bouke”.
Issue #13: It is now possible to add helper scripts to a bundle, for example for creating a GUI that starts a helper script in the background.
This can be done by using the option “–extra-scripts”, the value of which is a list of script files (”.py” or ”.pyw” files).
Smarter matplotlib recipe, it is now possible to specify which backends should be included. Issue #44, reported by Adam Kovics.
The argument to --matplotlib-backends (or ‘matplotlib_backends’ in setup.py) is a list of plugins to include. Use ‘-‘ to not include backends other than those found by the import statement analysis, and ‘*’ to include all backends (without necessarily including all of matplotlib)
As an example, use --matplotlib-backends=wxagg to include just the wxagg backend.
Default is to include the entire matplotlib package.
The packages included by a py2app recipe weren’t processed by modulegraph and hence their dependencies were not always included.
Fix virtualenv support: alias builds in a virtual environment failed to work.
(There are still issues with semi-standalone and alias plugin bundles in a virtualenv environment).
issue #18: improved PyQt and PySide support.
Py2app now has a new option named “–qt-plugins” (or “qt_plugins” in setup.py), this option specify a list of plugins that should be included in the application bundle. The items of the list can have a number of forms:
“plugintype/libplugin.dylib”
Specify one particular plugin
“plugintype/*foo*”
Specify one or more plugins using a glob pattern
“plugintype”
Include all plugins of a type, equivalent to “plugintype/*”.
The plugins are copied into “Resources/qt_plugins” and py2app adds a “qt.conf” file that points to that location for plugins.
issue #49: package data that is a zipfile is now correctly copied into the bundle instead of extracting the archive.
issue #59: compile site.py to ensure that the generated bundle doesn’t change on first run.
This is nice to have in general, and essential when using code signing because the signature will break when a new file is added after signing.
Reported by Michael McCracken.
issue #60: recipe for “email” package was not loaded
Reported by Chris Beaumont
issue #46: py2app no longer warns about the Qt license. We don’t warn about other possibly GPL licensed software either and py2app is not a license-enforcement tool.
Reported by briank_in_la.
Generated bundles always started with python optimization active (that is, as if running as ‘python -O’).
Fix issue #53: py2app would crash if a data file happened to be a zipfile.
py2app copies data files in the directory for a package into the application bundle. It also did this for directories that represent subpackages, which made it impossible to exclude subpackages.
added recipe for wxPython because some subpackages of wxPython use __path__ trickery that confuses modulegraph.
recipes can now return a list of additional entries for the ‘includes’ list.
rewritten the recipe for matplotlib. The recipe no longer includes the entire package, but just the “mpl-data” directory.
WARNING: This recipe has had limited testing.
fix mixed indentation (tabs and spaces) in argv_emulation.py, which caused installation failures on python 3.x (issue #40)
Issue #43: py2app now creates a symlink named “Current” in the ‘Versions’ directory of the embedded Python framework to comply with a requirement for the Mac App-store.
on some OSX releases the application receives both the “open application” and “open documents” Apple Events during startup, which broke an assumption in argv_emulation.py.
py2app is more strict w.r.t. explictly closing files, this avoids ResourceWarnings for unclosed files.
fix test issue with semi-standalone builds on Python 3.2
added recipe for pyzmq
Don’t use the version information from Python.framework’s Info.plist, but use sys.version_info. This fixes a build problem with EPD.
Ignore some more files when copying package data:
py2app 0.6.4 is a bugfix and minor feature release
Issue #28: the argv emulator crashes in 64-bit mode on OSX 10.5
Fixing this issue required yet another rewrite of the argv_emulator code.
Added option ‘–arch=VALUE’ which can be used to select the set of architectures for the main executable. This defaults to the set of architectures supported by the python interpreter and can be used to drop support for some architectures (for example when you’re using a python binary that supports both 32-bit and 64-bit code and use a GUI library that does not yet work in 64-bit mode).
Valid values for the argument are archectures used in the list below and the following groups of architectures:
Issue #32: fix crash when application uses PySide
This is partially fixed in macholib (release 1.4.3)
The ‘-O’ flag of py2app now defaults to the python optimization level when using python 2.6 or later.
Issue #31: honor optimze flag at runtime.
Until now an application bundle created by py2app would also run without the “-O” flag, even when the user specified it should. This is now fixed.
Issue #33: py2app’s application bundle launcher now clears the environment variable PYOBJC_BUNDLE_ADDRESS, avoids a crash when using PyObjC in an application launched from a py2app based plugin bundle.
py2app’s bundle launcher set the environment variable PYOBJC_BUNDLE_ADDRESS, this variable is now deprecated. Use PYOBJC_BUNDLE_ADDRESS<PID> instead (replace <PID> by the process ID of the current process).
When using the system python we now explicitly add Apple’s additional packages (like PyObjC and Twisted) to sys.path.
This fixes and issue reported by Sean Robinson: py2app used to create a non-working bundle when you used these packages because the packages didn’t get included (as intented), but were not available on sys.path either.
Fixed the recipe for sip, which in turn ensures that PyQt4 applications work.
As before the SIP recipe is rather crude, it will include all SIP-based packages into your application bundle when it detects a module that uses SIP.
The ‘Resources’ folder is no longer on the python search path, it contains the scripts while Python modules and packages are located in the site-packages directory. This change is related to issue #30.
The folder ‘Resources/Python/site-packages’ is no longer on the python search path. This folder is not used by py2app itself, but might by used by custom build scripts that wrap around py2app.
Issue #30: py2app bundles failed to launch properly when the scriptfile has the same name as a python package used by the application.
Issue #15: py2app now has an option to emulate the shell environment you get by opening a window in the Terminal.
Usage: python setup.py py2app --emulate-shell-environment
This option is experimental, it is far from certain that the implementation works on all systems.
Issue #16: --argv-emulation now works with Python 3.x and in 64-bit executables.
Issue #17: py2applet script defaults ‘argv_emulation’ to False when your using a 64-bit build of python, because that option is not supported on such builds.
py2app now clears the temporary directory in ‘build’ and the output directory in ‘dist’ before doing anything. This avoids unwanted interactions between results from a previous builds and the current build.
Issue #22: py2app will give an error when the specified version is invalid, instead of causing a crash in the generated executable.
Issue #23: py2app failed to work when an .egg directory was implictly added to sys.path by setuptools and the “-O” option was used (for example python setup.py py2app -O2)
Issue #26: py2app copied the wrong executable into the application bundle when using virtualenv with a framework build of Python.
py2app 0.6.3 is a bugfix release
py2app 0.6.2 is a bugfix release
py2app failed to copy the iconfile into application bundle (reported by Russel Owen)
py2app failed to copy resources and data files as well (the resource key in the py2ap options dictionary and the data_files argument to the setup function).
Issue #19, reported by bryon(at)spideroak.com.
py2app failed to build application bundles when using virtualenv due to assumptions about the relation between sys.prefix and sys.executable.
Report and fix by Erik van Zijst.
Ensure that the ‘examples’ directory is included in the source archive
py2app 0.6.1 is a bugfix release
Bugfixes:
py2app failed to build the bundle when python package contained a zipfile with data.
This version solves most of that problem using a rough workaround (the issue is fixed when the filename ends with ‘.zip’).
The code that recreates the stub executables when they are older than the source code now uses xcode-select to find the root of SDKs.
This makes it possible to recreate these executables on machines where both Xcode 3 and Xcode 4 are installed and Xcode 3 is the default Xcode.
The stub executables were regenerated using Xcode 3
As a word of warning: Xcode 4 cannot be used to rebuild the stub executables, in particular not those that have support for the PPC architecture.
Don’t rebuild the stub executables automaticly, that’s unsafe with Xcode 4 and could trigger accidently when files are installed in a different order than expected.
Small tweaks to the testsuite to ensure that they work on systems with both Xcode3 and Xcode4 (Xcode3 must be the selected version).
Better cleanup in the testsuite when setupClass fails.
py2app 0.6 is a minor feature release
Features:
it is now possible to specify which python distributions must be availble when building the bundle by using the “install_requires” argument of the setup() function:
setup(
...
install_requires = [
"pyobjc == 2.2"
],
)
py2app can now package namespace packages that were installed using pip <http://pypi.python.org/pypi/pip> or the setuptools install option --single-version-externally-managed.
the bundle template now supports python3, based on a patch by Virgil Dupras.
alias builds no longer use Carbon Aliases and therefore are supported with python3 as well (patch by Virgil Dupras)
argv emulation doesn’t work in python 3, this release will tell you abou this instead of silently failing to build a working bundle.
add support for custom URLs to the argv emulation code (patch by Brendan Simon).
You will have to add a “CFBundleURLTypes” key to your Info.plist to use this, the argv emulation code will ensure that the URL to open will end up in sys.argv.
py2app.util contains a number of functions that are now deprecated an will be removed in a future version, specifically: os_path_islink, os_path_isdir, path_to_zip, get_zip_data, get_mtime, and os_readlink.
The module py2app.simpleio no longer exists, and should never have been in the repository (it was part of a failed rewrite of the I/O layer).
Bug fixes:
py2app 0.5.2 is a bugfix release
Bug fixes:
py2app 0.5.1 is a bugfix release
Bug fixes:
py2app 0.5 is a minor feature release.
Features:
Bug fixes:
py2app 0.4.3 is a bugfix release
Bug fixes:
py2app 0.4.2 is a minor feature release
Features:
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
Buf fixes:
py2app 0.4.0 is a minor feature release (and was never formally released).
Features:
Bug fixes:
py2app 0.3.6 is a minor bugfix release.
Bug fixes:
py2app 0.3.5 is a minor bugfix release.
Bug fixes:
py2app 0.3.4 is a minor bugfix release.
Bug fixes:
py2app 0.3.3 is a minor bugfix release.
Bug Fixes:
py2app 0.3.2 is a major bugfix release.
Functional changes:
Bug Fixes:
py2app 0.3.1 is a minor bugfix release.
Functional changes:
Bug Fixes:
py2app 0.3.0 is a major feature enhancements release.
Functional changes:
py2app 0.2.1 is a minor bug fix release.
Bug Fixes:
py2app 0.2.0 is a minor bug fix release.
Functional changes:
Bug Fixes:
py2app 0.1.9 is a minor bug fix release.
Bugs fixed:
py2app 0.1.8 is a major enhancements release:
Bugs fixed:
Options changed:
New features:
py2app 0.1.7 is a bug fix release:
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:
See also:
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.
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:
py2app 0.1.4 is a minor bugfix release:
py2app 0.1.3 is a refactoring and new features release:
Known issues:
py2app 0.2 is primarily a bugfix release:
Known issues:
py2app 0.1.1 is primarily a bugfix release:
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: