In general, OS X app bundles are not designed to be started from a command line and passed arguments from a command line (as you note, OS X 10.6 added some support for this). The standard mechanism for passing files to an app is through Apple Events; this is used for the Finder's Open
command of a document file with a type handled by the app or when a file is dropped on the app's icon in the Dock. py2app
is designed to package applications that will be used like standard Mac GUI applications, in particular using the launch protocol and receiving files through Apple Events. It is not designed to produce command-line utilities. If the latter is what you are packaging, simply use the normal Distutils method of packaging. Or, if your script consists of only one file, you can make it a standalone shebang script as described here.
Also note that while running as a full-fledged app is necessary on OS X to use certain GUI interfaces, Python itself on OS X is normally installed in a framework and run from within a Python.app
bundle installed inside the framework. (This is true for the Apple-supplied Pythons, those installed by python.org
installers, and MacPorts
installed Pythons.) When scripts are run by one of these framework Pythons, they are recognized as GUI apps by OS X without the need to build their own app bundles.