我正在尝试让一些开源学术代码工作(项目主页在这里)。它是一个大型 C++ 代码库,带有一个(非常)薄的 Python 包装器,用于CDLL
加载 C++ 并调用一些可用于允许代码的原始 Python 脚本编写的 C 函数。
但是,初始导入代码会崩溃,因为它在站点包中找不到位于其旁边的 .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
,比如不是很pythonic,我看不到一个简单的解决方案。
(编辑:更正的函数名称,不清楚的重构无济于事!对不起!)