[Pythonmac-SIG] Allow multiple executables in a single py2app bundle

David Brooks dave at bcs.co.nz
Fri Feb 18 00:10:25 CET 2011


Hi,

The following patch enables the name of the stub executable to determine 
the Python script to run. This allows multiple scripts to use a common 
runtime.

Required manual steps are to make copies of the stub in ./MacOS and to 
copy the actual Python scripts into ./Resources.

N.B. The py2app/apptemplate/prebuilt contents need to be recreated by 
running 'python setup.py build' in py2app/apptemplate, before running 
the main 'setup.py install'.


Enjoy!

Dave

=================================================

diff --git a/py2app/apptemplate/src/main.c b/py2app/apptemplate/src/main.c
--- a/py2app/apptemplate/src/main.c
+++ b/py2app/apptemplate/src/main.c
@@ -1017,8 +1017,9 @@

      argv_new = alloca((argc + 1) * sizeof(char *));
      argv_new[argc] = NULL;
-    argv_new[0] = c_mainScript;
-    memcpy(&argv_new[1],&argv[1], (argc - 1) * sizeof(char *));
+    //argv_new[0] = c_mainScript;
+    //memcpy(&argv_new[1],&argv[1], (argc - 1) * sizeof(char *));
+    memcpy(argv_new, argv, argc * sizeof(char *));
      py2app_PySys_SetArgv(argc, argv_new);


diff --git a/py2app/bootstrap/boot_app.py b/py2app/bootstrap/boot_app.py
--- a/py2app/bootstrap/boot_app.py
+++ b/py2app/bootstrap/boot_app.py
@@ -7,7 +7,7 @@
      site.addsitedir(os.path.join(base, 'Python', 'site-packages'))
      if not scripts:
          import __main__
-    for script in scripts:
-        path = os.path.join(base, script)
-        sys.argv[0] = __file__ = path
-        execfile(path, globals(), globals())
+    script = sys.argv[0].split('/')[-1] + '.py'
+    path = os.path.join(base, script)
+    sys.argv[0] = __file__ = path
+    execfile(path, globals(), globals())

=================================================




More information about the Pythonmac-SIG mailing list