Zorba with Python - Windows Installation
These steps were checked on Windows 7 and Python 2.7 (32bits) with the Zorba Revision 10986 from Jun 29th, 2011, this revision has important bug fixing and it requires at least this version to work.It should work fine with any Python 2.7.X (32 bits) version.
Install Python
Download and install Python binaries from
http://www.python.org/getit/. If you want to debug the python binding you will need to download the sources and compile python in order to get the debug library of python:
python_d.lib.
Install Swig
Zorba uses Swig to create the binding in python language, you only need the binary to create it, download from
http://www.swig.org/download.html and install.
Compiling the Zorba Python Library
In order to compile the Python binding you need first to follow the steps to compile Zorba, but before compiling, you must need to add one extra variable to the CMAKE command line:-D ZORBA_USE_SWIG=ON Turn on the Swig library, in case you have other bindings, this flag will help to activate them.You should not need any other extra flag, cmake should be able to detect python at this point, but in case cmake can't find python installation you can add these two flags:-D PYTHON_LIBRARIES=... Specify where the libs directory is located, i.e. "C:\Python27\libs"-D PYTHON_INCLUDE_PATH=... Specify where the include directory is located, i.e. "C:\Python27\include".After adding those lines CMAKE will add automatically the Python binding project and after compiling you will get two files: _zorba_api.pyd and zorba_api.py, these files are the binding for zorba.
Testing
Verify that Zorba is working by command line:
C:\>zorba.exe -q '2+1'
<?xml version="1.0" encoding="UTF-8"?>
3
Test the following example in python, this example contains a direct path to the two files generated, you can change this according to your configuration or by moving those files to libs directory:
import sys
sys.path.insert(0, 'C:\\zorba\\vs2010\\swig\\python')
import zorba_api
def example1(zorba):
xquery = zorba.compileQuery("1+2")
print xquery.printPlanAsXML()
print xquery.execute()
return
def example2(zorba):
xquery = zorba.compileQuery("(1,2,3,4,5)")
iter = xquery.iterator()
iter.open()
item = zorba_api.Item_createEmptyItem()
while iter.next(item):
print item.getStringValue()
iter.close()
iter.destroy()
return
def example3(zorba):
try:
xquery = zorba.compileQuery("1 div 0")
print xquery.execute()
except RuntimeError, e:
print e
return
def example4(zorba):
try:
xquery = zorba.compileQuery("for $i in (1,2,")
print xquery.execute()
except RuntimeError, e:
print e
return
store = zorba_api.InMemoryStore_getInstance()
zorba = zorba_api.Zorba_getInstance(store)
print "Example1:"
example1(zorba)
print ""
print "Example2:"
example2(zorba)
print ""
print "Example3:"
example3(zorba)
print ""
print "Example4:"
example4(zorba)
print ""
zorba.shutdown()
zorba_api.InMemoryStore_shutdown(store)
Useful links Zorba Python API Documentation