我已经能够在我的.pyx脚本上使用cython在linux上创建一个.so文件。我也可以成功地对我的python解释器进行导入。
我的问题是如何在最终用户的机器上安装这个.so而不使用cython?我不想将任何.pyx或.py或.c文件分发给最终用户。而且我也不希望最终用户安装cython或任何东西来使用我的.so文件
答案 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来解决此问题) )。