Hermann Himmelbauer wrote:
I have the problem that I cannot include parts of my Zope3 project in external, Zope3-unrelated projects due to import errors.

You have problem and cause mixed up. You get import errors due to the fact that the Zope 3 libraries aren't on your PYTHONPATH.

For instance, I currently build a LaTeX converter that automatically converts SQL-Alchemy table definitions into nicely formatted LaTeX that I can then include in my project documentation.

This converter has to import my table definitions file, which however fails, as on the top of the file there are Zope3-specific imports and directives, e.g.:

from zope.interface import implements
import z3c.zalchemy
metadata = z3c.zalchemy.metadata()

My Python interpreter does not know anything about zope yet, as it's not in the PYTHONPATH, therefore the import of zope.interface fails. I assume, I should somehow put the Zope3 modules into the PYTHONPATH - but how would you recommend that? Should I perhaps link it from python/lib/site-packages? Or should I include the Zope3 top-level directory into PYTHONPATH?

  $ export PYTHONPATH=/usr/local/Zope-3.3.x/lib/python
  $ python myscript.py

I would not recommend modifying the global Python installation to include Zope. For scripts, setting PYTHONPATH is simple enough. For anything fancier, I suggest using the setuptools mechanism to depend on the relevant Zope eggs (install_requires in setup.py) and installing it in a controlled environment (virtual-python, virtualenv or zc.buildout)

Moreover, what's even more complicated is the import of z3c.zalchemy, how should I solve that one?

$ export PYTHONPATH=~/my/zope/instance/lib/python:/usr/local/Zope-3.3.x/lib/python
  $ python myscript.py

(assuming that z3c.zalchemy is installed as a package in your Zope instance).

I thought about a construct like this:

if ???started via debugzope / zopectl???:
   import z3c.zalchemy
   metadata = MetaData()
   from sqlalchemy import MetaData
   metadata = MetaData()

But I don't know how to fomulate the if-clause above. Perhaps there's a better solution to this problem?

      from z3c.zalchemy import MetaData
  except ImportError:
      from sqlalchemy import MetaData

  metadata = MetaData()

http://worldcookery.com -- Professional Zope documentation and training

Zope3-users mailing list

Reply via email to