我想构建两个相关的conda包:
libfoo.so
foopy
导入后,foopy
模块需要找到libfoo.so
文件,然后将其与ctypes一起使用:
so_directory = ???
lib = ctypes.cdll.LoadLibrary(os.path.join(so_directory, 'libfoo.so'))
如何可靠地找到libfoo.so
文件的位置?我很乐意改变这两种食谱。
答案 0 :(得分:5)
我建议将.so安装到PREFIX / lib文件夹中 - 换句话说,将其放在默认搜索路径上。
对于Windows / Anaconda,这是PREFIX / Library / bin。
编辑:
PREFIX就在您安装Python的任何地方。这可能是/ usr或/ usr / local,或〜/ miniconda
此外:
您应该删除os.path.join位并将文件名传递给DLL加载。它将查看默认路径,只要您从PREFIX运行python,它将包含上述路径。
答案 1 :(得分:1)
我想我会使用相对路径。
这里有点相关的帖子。 Python ctypes: loading DLL from from a relative path
我们说我们已经在某个随机位置d = {(key, value) for (key, value) in zip(key_list, value_list)}
激活了conda env。我绝对会将你的$BAR
放在libfoo.so
。要做到这一点,只需确保conda-build将其置于$BAR/lib/libfoo.so
。
然后,让我们说$PREFIX/lib/libfoo.so
项目的标准为foopy
,代码位于setup.py
。这将得到pip-或conda-安装到foopy/__init__.py
。 (或python3.x)所以$BAR/lib/python2.7/site-packages/foopy/__init__.py
的内容就像
foopy/__init__.py