Python 打包成 SO 文件

2018-12-06 14:53:09 +08:00
 secsilm

现在需要将 Python 源码打包成 SO 文件,然后给再用 Python 调用这个生成的 SO 文件。

我查了一些资料,例如 https://www.cnblogs.com/ke10/p/py2so.html,然后照着生成了 SO 文件,接着在使用 ctypes 调用的时候出了问题,报错 AttributeError: build/lib.linux-x86_64-3.6/test.cpython-36m-x86_64-linux-gnu.so: undefined symbol: np_add

test.py 文件:

import numpy as np

def np_add(x, y):
    return x + y

if __name__ == "__main__":
    x = 1
    y = 2
    print(f"{x} + {y} = {np_add(x, y)}")

setup.py 文件:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize("test.py"))

各位有什么建议吗?或者说不采取这种方法,有其他经过试验的方法可以成功打包并成功调用的吗?

希望过来人给点建议,先谢谢了。

4729 次点击
所在节点    Python
3 条回复
holajamc
2018-12-06 16:49:46 +08:00
http://nuitka.net/
试试这个~
anonymous256
2018-12-06 17:00:59 +08:00
我在 win 下是编译成功的, 你的环境里可能没有安装 swig. which swig 你检查一下

而且似乎你写了一条没有用的语句: if __name__ == "__main__" ,,这是无效的, 既然已经用了 cython, 则不存在 main 的入口.
anonymous256
2018-12-06 17:18:02 +08:00
我没有使用你的 setup.py ,你修改下试试。
from distutils.core import setup, Extension
import numpy

np = Extension('test', sources=['test.py'],
include_dirs=[numpy.get_include()])
setup(ext_modules=[np])

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/514959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX