Hermann Himmelbauer wrote:
Hi,
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()
else:
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?
try:
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
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users