众所周知,python是个解释性语言。如果你不想把代码展示给他人,那就将其编译成win下的.pyd库文件,或者linux下的.so库文件
Windows下的 python 生成 .pyd
假设你现在有个 test.py
# test.py
def add(a, b):
return a+b
现在你想把这个test.py编译成pyd文件,像下面新建一个setup.py
# setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(name='test', ext_modules=cythonize('test.py'))
python setup.py build
该文件夹下会生成一个一个build文件夹,build里边有一个.pyd文件。把pyd文件拷贝到当前文件夹路径(个人习惯),然后按照如下方式调用:
from test import add
if __name__ == '__main__':
a, b = 1, 1
print(add(a, b))
或者使用python setup.py build_ext --inplace
进行编译,然后.pyd文件会直接生成在当前文件夹,然后像上面调用的方式调用。
Linux python to .so
与win下生成.pyd文件相似,同样以test.py为例,建立setup.py 文件。
# setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(['test.py']))
python3 setup.py build_ext --inplace
调用 .so file
import ctypes
ll = ctypes.cdll.LoadLibrary
demo = ll("test.so")
Linux C++ 生成 .so
gcc -shared -f PIC test.c -o test.so