Ronald Oussoren wrote:
Note that py2app needs a considerable amount of attention though:

* need enhancements to properly support eggs:
  - copy entire eggs into the .app bundle, instead of just bits and pieces
  - support the "entry-point" feature for eggs
- an option to specify required eggs in setup.py (like setup_requires, but for a specific app)

Just yesterday I implemented a bit of post setup() code that allows me to inject some eggs into my app bundle after it has been created. First I specify the egg's package name in the packages option so py2app will include the package and do dependency checks on it, but not put it in the zip file. Then after setup() has run I remove these package folders, copy in the egg folders (none of mine are zipped but that should probably work too) and then create a sitecustomize.py in the app to add the eggs to the sys.path. This last step is needed because it looks like the normal .pth file processing is not included in the site.py used in the app bundle.

Here is a bit of the code from my setup.py, the two names used in the for loop items are because some eggs use a different egg name than the package name.

    makingAlias = '-A' in sys.argv or '--alias' in sys.argv
    if not makingAlias:
base = 'dist/%s.app/Contents/Resources/lib/python%s' % (NAME, sys.version[:3])
        sc = file(os.path.join(base, 'sitecustomize.py'), 'w')
        sc.write("import sys, os\nbase = os.path.dirname(__file__)\n")
        for distname, pkgname in [('Foo', 'foo'),
                                  ('Bar', 'bar'),
                                  ('xyz', 'xyz')]:
            dist = pkg_resources.get_distribution(distname)
            distbase = os.path.basename(dist.location)
            remove_tree(os.path.join(base, pkgname))
copy_tree(dist.location, os.path.join(base, distbase), update=1, verbose=1)
            sc.write("sys.path.append(os.path.join(base, '%s'))\n" %
distbase)


This probably isn't enough to use as a base for general purpose egg support in py2app, but it can at least be used as a stopgap measure until somebody who knows what they are doing can add support for it in the right way.


--
Robin Dunn
Software Craftsman
http://wxPython.org  Java give you jitters?  Relax with wxPython!


_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig

Reply via email to