如何分发从cython生成的.so文件
问题描述:
我已经能够在我的.pyx脚本上使用cython在linux上创建一个.so文件。我也可以成功地在我的Python解释器上进行导入。如何分发从cython生成的.so文件
我的问题是如何在不使用cython的情况下在最终用户的机器上安装.so。我不想将任何.pyx或.py或.c文件分发给最终用户。而且我也不希望最终用户安装cython或其他任何东西来使用我的.so文件
答
您可以使用ldd
来检查.so的静态依赖关系。这里有一个.so我用Cython建我的Ubuntu桌面上的依存关系:
$ ldd iksolver.so
linux-vdso.so.1 => (0x00007fffc07fe000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdcabc08000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdcab903000)
libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007fdcab3d3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdcab00b000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdcac068000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fdcaadf4000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdcaabef000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fdcaa9ec000)
$
你可以看到,这取决于安装了很多其他库,而且它需要安装python2.7,但这里的一切安装在默认的Ubuntu部署中。请注意,这里没有任何要求安装Cython。
如果使用相同的处理器架构和相同版本的操作系统,您将能够将.so复制到目标机器上的/usr/local/lib/python2.7/dist-packages
,然后您就可以导入它。
当然,如果您的Cython模块中有任何import
语句,您需要确保这些模块也存在于目标系统上。
我想你必须确保最终用户至少有相同的处理器架构。我不确定不同python版本之间的内部兼容性,尽管...为什么不向用户提供一个.c文件? – dmytro 2013-02-13 02:03:10
我不想给他们来源。 :) – user2005803 2013-02-13 02:33:06
然后它是一个死的手:你将不得不为所有目标平台编译自己... – 2013-02-17 13:51:49