I'm trying to get some open source academic code working (the project home is here). It is a big C++ codebase with a (very) thin python wrapper which uses CDLL
to load the C++ and call some C functions that are available to allow primitive python scripting of the code.
However, the initial import code crashes because it can't find the .so files sitting next to it in site-packages:
in the installed file:
from ctypes import *
try:
self.lib = CDLL("_lammps.so")
except:
try:
self.lib = CDLL("_lammps_serial.so")
except:
raise OSError,"Could not load LAMMPS dynamic library"
and in a script or the interpreter:
from lammps import lammps
l = lammps()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lammps.py", line 42, in __init__
raise OSError,"Could not load LAMMPS dynamic library"
OSError: Could not load LAMMPS dynamic library
Other answers might seem to have this covered, but this only works if CDLL()
is called within the script actually invoked (or the working directory of the prompt that ran the interpreter) - i.e. if the 'relative path' is in user-space, rather than python-library-space.
How do we reliably install for import a C/C++ library that we built ourselves? Short of polluting the system library locations like /usr/lib
, which isn't very pythonic, I can't see an easy solution.
(EDIT: corrected function names, unclear refactoring unhelpful! sorry!)