Я пытаюсь заставить работать какой-нибудь академический код с открытым исходным кодом (дом проекта здесь ). Это большая кодовая база C ++ с (очень) тонкой оболочкой Python, которая использует CDLL
для загрузки C ++ и вызова некоторых функций C, которые позволяют примитивному написанию сценариев Python для кода.
Однако исходный код импорта падает, потому что он не может найти .so файлы, сидящие рядом с ним в пакетах сайта:
в установленном файле:
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"
и в скрипте или интерпретаторе:
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
Другие ответы может показаться, что это покрыто , но это работает только в том случае, если CDLL()
вызывается внутри фактически вызванного скрипта (или рабочего каталога приглашения, запустившего интерпретатор) - то есть, если 'относительный путь' находится в пространстве пользователя, а не в пространстве библиотеки Python.
Как мы можем надежно установить для импорта библиотеку C / C ++, которую мы создали сами? Если не считать загрязнение мест расположения системных библиотек, таких как /usr/lib
, что не очень питонично, я не вижу простого решения.
(РЕДАКТИРОВАТЬ: исправлены имена функций, неясный рефакторинг, бесполезен! Извините!)