At 10:56 PM 5/13/2009 -0500, Randall Smith wrote:
I'd like to bundle some third party eggs with my application without installing them. Typically, I'd read __file__ and alter sys.path at runtime to include the third party packages, but I understand that will not work with zipped eggs.

I don't know the best way to go about this, but I at least want to know a clean way to do it without requiring the third party eggs to be downloaded and installed separately. Consider this layout.

theapp/
  docs/
  setup.py
  theapp/
    __init__.py
    app.py
    ext/
      thirdparty1.egg
      thirdparty2.egg
      thirdparty3.egg
  tests/

From my current understanding about how setuptools works, I think I could treat the third party eggs as data files and and runtime (somehow?) insert them into the path and import them.

I'm trying to work from this example.

http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resources

Is this a workable approach?

No. You need the eggs to be unzipped, and in the *root* of your distributed egg, alongside your package. i.e.:

theapp/
   ...
tp1.egg/
   ...contents here...
tp1.egg/
   ...contents here...

You can then simply use require() at runtime to access the bundled eggs.


  Is there a better way?

Yes. Simply install your entire application as eggs and scripts in a single directory (using "easy_install -maxd somedir myapp") and then tarball and ship "somedir". Less muss, less fuss, and no require(). (I.e., just declare your dependencies in setup.py)

If you want to, you can even ship without needing setuptools installed on the target machine - just copy the pkg_resources module to "somedir" before you tarball it up.

_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to