Compile kent source as dynamic library: Difference between revisions
From genomewiki
Jump to navigationJump to search
(Created page with " cd src/lib make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0 gcc -shared -o kent.so *.o font/*.o -lz -lpng") |
No edit summary |
||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
To run kent src functions from python, you need to compile the tree with -fPIC. It's easier to deactivate the various libraries: | |||
cd src/lib | cd src/lib | ||
make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0 | make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0 | ||
gcc -shared -o kent.so *.o font/*.o -lz -lpng | gcc -shared -o kent.so *.o font/*.o -lz -lpng | ||
Now you can create a stub for all functions in the kent source library: | |||
python --version # make sure we have python >2.5 installed, usually the case except old Redhat versions | |||
pip install ctypesgen | |||
ctypesgen.py ../inc/*.h -lkent.so -o kent.py | |||
And then call kent source functions in your python script: | |||
import kent | |||
p = kent.pslLoadAll("test.psl") | |||
print p.contents.blockCount | |||
kent.freeMem(p) # remember that all objects we get back have to be freed, these are normal C structs, not python objects | |||
Most functions return pointers to structs, not data directly, so you will usually have to use the .contents attribute to get the data. |
Latest revision as of 20:31, 20 May 2013
To run kent src functions from python, you need to compile the tree with -fPIC. It's easier to deactivate the various libraries:
cd src/lib make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0 gcc -shared -o kent.so *.o font/*.o -lz -lpng
Now you can create a stub for all functions in the kent source library:
python --version # make sure we have python >2.5 installed, usually the case except old Redhat versions pip install ctypesgen ctypesgen.py ../inc/*.h -lkent.so -o kent.py
And then call kent source functions in your python script:
import kent p = kent.pslLoadAll("test.psl") print p.contents.blockCount kent.freeMem(p) # remember that all objects we get back have to be freed, these are normal C structs, not python objects
Most functions return pointers to structs, not data directly, so you will usually have to use the .contents attribute to get the data.