前言
将Python程序打包成DLL可以方便其他编程语言调用Python模块的功能。通常有三种方式可以实现这一操作。
1. 使用ctypes模块
python自带的ctypes模块可以把C语言的动态链接库包装成Python模块,也可以在Python中加载自己建立的动态链接库。
示例:
# 1. 编写C语言代码
#include <stdio.h>
#include <stdlib.h>
int add(int a, int b) {
return a + b;
}
int substract(int a, int b) {
return a - b;
}
int max(int a, int b) {
return a > b ? a : b;
}
// 编译生成动态链接库
// gcc -shared -o mylib.dll mylib.c
# 2. 使用ctypes加载动态链接库并调用函数
from ctypes import *
mylib = CDLL('./mylib.dll')
print(mylib.add(1, 2)) # output: 3
print(mylib.substract(5, 3)) # output: 2
print(mylib.max(7, 3)) # output: 7
2. 使用pybind11库
Pybind11是一个轻量级的C++11库,它使得Python与C++互操作变得更加方便,基于pybind11可以将C++函数打包为Python模块。
示例:
// 编写C++代码
#include <iostream>
namespace example {
int add(int i, int j) {
return i + j;
}
}
// 编译生成动态链接库
// g++ -shared -std=c++11 -fPIC `python -m pybind11 --includes` example.cpp -o example`python-config --extension-suffix`
# 使用pybind11加载动态链接库并调用函数
import example
print(example.add(1, 2)) # output: 3
3. 使用Cython进行编译
Cython 可以将Python程序转换为C/C++代码,并使用这些代码生成DLL文件。
示例:
# 编写Python代码,保存为fib.pyx
cpdef int fib(int n):
cdef int i, a = 0, b = 1, temp
for i in range(n):
temp = a
a = b
b = temp + b
return a
# setup.py, 用于编译pyx文件
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("fib.pyx"))
# 编译生成动态链接库
python setup.py build_ext --inplace
# 使用ctypes加载动态链接库并调用函数
from ctypes import *
lib = CDLL('./fib.cpython-38-x86_64-linux-gnu.so') # Python版本 3.8, windows下so要变成dll
print(lib.fib(6)) # output: 8
以上三种方式都可以方便地将Python程序打包成动态链接库,并提供给其他编程语言使用。
-END-
我下面也给大家整理了一些Python入门进阶的资料,大家如果有需要的话,可以参考以下这些资料
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python学习路线
二、Python基础学习
1. 开发工具
给大家准备考Python开发过程中需要用到的必备工具,包括最新版PyCharm安装永久机活工具。
2. 学习笔记
3. 学习视频
三、Python小白必备手册
四、Python实战案例
五、Python爬虫秘笈
六、数据分析全套资源
七、Python面试集锦
2. 简历模板
资料领取
上述这份完整版的Python全套学习资料已经上传网盘,朋友们如果需要可以微信扫描下方二维码输入“领取资料” 即可自动领取
或者
【点此链接】领取
