如何分发从cython生成的.so文件

时间:2013-02-12 20:49:10

标签: cython

我已经能够在我的.pyx脚本上使用cython在linux上创建一个.so文件。我也可以成功地对我的python解释器进行导入。

我的问题是如何在最终用户的机器上安装这个.so而不使用cython?我不想将任何.pyx或.py或.c文件分发给最终用户。而且我也不希望最终用户安装cython或任何东西来使用我的.so文件

2 个答案:

答案 0 :(得分:3)

您可以使用ldd检查.so的静态依赖关系。以下是我在Ubuntu桌面上使用cython构建的.so的依赖项:

$ 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语句,则需要确保这些模块也存在于目标系统上。

答案 1 :(得分:0)

分发python轮更容易也更好。 您需要在目标计算机上使用pip3,而不是Cython。

在建筑机器上:

使用这种setup.py:

构建你的轮子
python3 setup.py bdist_wheel

以下命令行:

.whl

您将在dist文件夹中获得pip3 install myPackage-*-cp34-cp34m-linux_x86_64.whl 个文件。

在目标计算机上:

将wheel文件复制到目标计算机 然后使用以下命令行安装它:

main.less

(请注意,您的软件包是为python(cp34)版本和专用平台(linux_x86_64)构建的,因此您需要与构建机器相同(或者您可以使用manylinux来解决此问题) )。