Python包中共享C库的路径无关管理

|| 假设我有一个名为Foo的软件包,其组织方式如下:
Foo\\
    __init__.py
    foo.py
    bar.py
    lib\\
        libwhatever.so
我的模块foo.py使用python ctypes包装了我的libwhatever.lib中包含的C方法,这涉及检查lib是否在应有的位置。 2个问题: 1)无论整个Foo软件​​包都放置在哪里,如何在我的软件包中检查所需的库是否位于其位置(在Foo \\ lib中)? 现在,通往我的库的路径是硬编码的,但是,由于我以后可能会分发它们,因此问题将会出现。 2)然后我有模块bar.py,它在libwhatever内部打包了一个较慢的Python C例程版本。我想用它们代替libwhatever的导入是否失败。有没有一种方法可以在库的导入成功或失败之间抽象地在C和Python版本的例程之间切换? 预先感谢您的建议。     
已邀请:
        假设您使用的是Linux,我认为您必须将该.so文件添加到库搜索路径中,或者将模块目录添加到您的路径中。看看ldconfig。
man ldconfig
。一旦执行了这两个操作,就可以使用
ctypes.util.find_library()
。否则,您必须具有.so文件的完整路径才能使用
cdll()
。 我想我会做的就是在运行时构建该路径-这样的话:
from ctypes import CDLL
import Foo
try:
    MyLib = CDLL(Foo.__path__[0] + \'/lib/libwhatever.so\')
except OSError:
    from Foo import bar as MyLib
不过,也许有更好的方法...     

要回复问题请先登录注册