py2app Setuptools Configuration¶
Setup function arguments¶
The primary way to configure py2app is to use a “setup.py” script that
calls setuptools.setup()
with a number of specific arguments.
The basic structure:
from setuptools import setup
setup(
app=...
options={
"py2app"={
...
}
}
)
The following keyword arguments are used by py2app:
name
Name of the application or plugin bundle. The name is also included as the
CFBundleName
in theInfo.plist
file.By default this is derived from the name of the main script.
version
The version of the application or plugin bundle, will be included in the Info.plist (unless the specified plist already contains a
CFBundleVersion
key).When this keyword argument is not used py2app tries to find a toplevel assignment of a constant string to
__version__
in the main script, and uses the last one found. The version is set to0.0.0
When there is no such assignment, or the last assignment uses an expression or non-string value.app
A list of application scripts, each of which will by used to generate an application bundle. This must be a list of 1 item.
Entries in the list are one of:
- A string with the filename of the main script of the application;
- A dictionary with the following keys (only
script
is required):script
: A string with the filename of the main script for the applicationplist
: A dictionary with the contents of the plist fileextra_scripts
: A list of filenames of scripts that will have a launcher included in theContents/MacOS
folder.
This keyword argument is mutually exclusive with
plugin
.plugin
A list of plugin scripts, each of which will by used to generate a plugin bundle. This must be a list of 1 item.
Entries in the list are one of:
- A string with the filename of the main script of the plugin;
- A dictionary with the following keys (only
script
is required):script
: A string with the filename of the main script for the pluginplist
: A dictionary with the contents of the plist fileextra_scripts
: A list of filenames of scripts that will have a launcher included in theContents/MacOS
folder.
This keyword argument is mutually exclusive with
app
.data_files
A list of data files to include in the
Resources
folder in the generated bundle. Entries of this list should be one of the following:- A string specifying the path to a resource (file or folder).
These are copied into the
Resources
folder - A two-tuple
(dirname, [file, ...])
. Thedirname
is a folder name relative to theResources
folder, and thefile
-s are the names of sources (files or folders) copied into the specified folder.
- A string specifying the path to a resource (file or folder).
These are copied into the
options
The
options
argument should be a directory, where thepy2app
key contains py2app configuration options, as specified below.
Configuration options¶
Options can be specified to py2app to influence the build procedure in three different ways:
At the command line:
$ python setup.py py2app --includes=os,platform
In your setup.py
:
setup(
app=['MyApplication.py'],
options={
"py2app": {
"includes": ["os", "platform"],
}
},
)
In a setup.cfg
file:
[py2app]
includes=os,platform
Note that when translating command-line options for use in setup.py
, you
must replace hyphens (-
) with underscores (_
). setup.cfg
files
may use either hyphens or underscores, but command-line options must always
use the hyphens.
Lists of values are a comma separated sequence of names on the command-line and in setup.cfg, and regular python lists in setup.py (as shown in the earlier example).
Option Reference¶
To enumerate the options that py2app supports, use the following command:
$ python setup.py py2app --help
Options for ‘py2app’ command:
Command-line | Setup.py | Value | Description |
---|---|---|---|
--optimize |
optimize | level (integer) | Specifies the optimization level for the Pytho interpreter
level 0 to disable, level 1 for python -O , and level 2
for python -OO . Defaults to the optimization level of the
process running py2app. |
--includes |
includes | list of module names | A list of Python modules to include even if they are not detected by dependency checker. Packages in this list are ignored. |
--packages |
packages | list of package names | A list of Python packages to include even if they are not detected by dependency checker. The whole package will be included. |
--maybe-packages |
maybe_packages | list of package names | A list of Python packages to include outside of the zipfile when detected as a dependency by the dependency checker. |
--excludes |
excludes | list of module or package names | A list of Python modules or packages to exclude even if they are detected by dependency checker. |
--expected-missing-imports |
expected_missing_imports | list of module or package names | A list of Python module/package names that are expected to be missing, or a string starting with a @-sign followed by the name of file containing this list (one name per line). This is used to fine-tune error reporting. |
--matplotlib-backends |
matplotlib_backends | List of matplotlib backend names | The matplotlib backends that will be included when matplotlib is one of the included libraries. The default is to include all of matplotlib. Use ‘*’ to include all backends, and “-” to only include backends that are explicitly included. |
--qt-plugins |
qt_plugins | List of Qt plugins | Specifies plugins to include in an application using PyQt4. |
--dylib-excludes |
dylib_excludes | A list of shared libraries or frameworks | The specified libraries and frameworks will not be included in the output. |
--frameworks |
frameworks | A list of shared libraries or frameworks | The specified libraries and frameworks will be included in the output. |
--iconfile |
iconfile | Path the the icon file | Specify the icon to use for the application, the “.icns” suffix may be left off. The default is to use a generic icon. |
--plist |
plist | Path to a plist template, or (in setup.py) a Python dictionary. | Specify the contents of the Info.plist. Py2app will add some information to the file when it is copied into the output. |
--datamodels |
datamodels | List of xcdatamodels | The specified xcdatamodel files will be compiled and included into the bundle Resources |
--mappingmodels |
mappingmodels | List of xcmappingmodels | The specified xcmappingmodel files will be compiled and included into the bundle Resources |
--resources |
resources | List of files and folders | Specifies additional files and folders to include in the bundle Resource. Do not use this to copy additional code. |
--extension |
extensionn | file extension, includding the dot | The extension to use of the output, defaults to “.app” for applications and “.plugin” for plugins. Commonly only used for plugins. |
--arch |
arch | “intel”, “fat”, “universal”, “universal2”, “i386”, “x86_64”, “ppc” | The (set of) architecture(s) to use for the main executable in the output. This should be a subset of the architectures supported by the python interpreter. |
--no-strip |
no_strip | None (use True in setup.py) |
Don’t strip debug information and local symbols from the output. Default is to strip. |
--semi-standalone |
semi_standalone | None (use True in setup.py) |
Create output that depends on an existing installation of Python, but does contain all code and dependencies. |
--alias |
alias | None (use True in setup.py) |
Create output that depends on an existing installation of Python and uses the sources outside of the bundle. This is only useful during development, you can update source files and relaunche the application without rebuilding the bundle. Do not use for distribution |
--graph |
None | Emit a “.dot” file with the module dependency graph after the build. The output will be stored next to the regular output. | |
--xref |
xref | None | Emit a module cross reference as HTML. The output will be stored next to the regular output. |
--report-missing-from-imports |
None (use True in setup.py) |
Include a list of missing names for from module import name in
the output at the end of the py2app run. |
|
--no-report-missing-conditional-import |
None | Do not include missing modules that might be conditionally imported in the output at the end of the py2app run. | |
--use-faulthandler |
use_faulthandler | None (use True in setup.py) |
Enable the Python faulthandler, requires Python 3.3 or later. |
--no-chdir |
no_chdir | None | Don’t change the working directory to the bundle Resource directory. This option is always enabled in plugins. |
--argv-emulation |
argv_emulation | None (use True in setup.py) |
Fill The argv emulator runs a small event loop during program launch
to intercept file-open and url-open events. The to-be-opened
resources will be added to WARNING: Do no use this option when the program uses a GUI toolkit. The emulator tends to confuse GUI toolkits, and most GUI toolkits have APIs to react to these events at runtime (for example to open a file when your program is already running). This option cannot be enabled for plugins. |
--emulate-shell-environment |
emulate_shell_environment | None (use True in setup.py) |
Set up environment variables as if the program was launched from a fresh Terminal window. Don’t use this with plugins. By default applications inherit the environment from the application launcher (when double clicking the application in the Finder), which is does not include environment variables set in the users shell profile. Only use this when the application needs to access environment variables set in the Terminal. This option is not meant for general use. |
--use-pythonpath |
use_pythonpath | None (use True in setup.py) |
Allow the PYTHONPATH environment varialble to affect the interpreter’s search path. This is generally not useful, PYTHONPATH is not included in the minimal shell environment used by the application launcher. |
--site-packages |
site_packages | None (use True in setup.py) |
Include the system and user site-packages in Note that this makes the bundle less standalone, packages installed on a users’s system may affect the bundle. |
--extra-script |
extra_scripts | List of file names for scripts | The mentioned scripts will be included in the For Python scripts the file in |
--argv-inject |
argv_inject | values to inject, a single string will be split using shlex.split |
The values will be inserted in to sys.argv after argv[0] . |
--bdist-base |
bdist_base | directory name | base directory for build library (default is build) |
--dist-dir |
dist_dir | directory name | directory to put the final built distributions in (default is dist) |
--include-plugins |
include_plugins | List of plugin bundles | The plugin bundles will be copied into the application bundle at the expected location for the type of plugin |
--redirect-stdout-to-asl |
redirect_stdout_to_asl | None (use True in setup.py) |
Forward the stdout/stderr streams to Console.app using ASL |
--debug-modulegraph |
debug_modulegraph | None (use True in setup.py) |
Drop into the pdb debugger after building the module graph This is an development option |
--debug-skip-macholib |
debug_skip_macholib | None (use True in setup.py) |
Don’t run macholib. The output will not be standalone. This is an development option |
Options to specify which objects to include or exclude (the first part of the table above) are used to finetune the behaviour of py2app and should generally not be necessary. Please file an issue on the py2app tracker if a package on PyPI requires one of these options, which allows me to change py2app to do the right thing automatically.