安装
下载 swigwin
软件包,解压到合适的位置,然后将路径添加到环境变量即可。
编写C++代码
//vector.hpp
class Vector
{
private:int x;int y;
public:Vector(int,int);double abs();void display();
};
//vector.cpp
#include "vector.hpp"
#include <iostream>
#include <cmath>
using namespace std;Vector::Vector(int a,int b){ x=a; y=b; }
void Vector::display(){ cout << "(" << x << ',' << y << ')' << endl; }
double Vector::abs(){ return sqrt(x*x+y*y); }
打包成接口
编写*.i
文件
/* vector.i */
%module vector
%{
#include "vector.hpp"
%}%include "vector.hpp"
在命令行输入
swig -c++ -python mod.i
生成两个新文件:
vector.py
vector_warp.cxx
编译
新建setup.py
文件
#setup.py
from setuptools import setup, Extensionmod_module = Extension('_vector',sources=['vector_wrap.cxx', 'vector.cpp'],)setup (name = 'vector',version = '0.1',author = "beshar",description = """Simple swig example from docs""",ext_modules = [mod_module],py_modules = ["vector"],)
命令行输入:
python setup.py build_ext --inplace
编译出.pyd
文件
测试
新建一个test.py
文件
import vectorv=vector.Vector(2,3)
v.display()
d=v.abs()
print(d)
输出:
(2,3)
3.605551275463989
发布
编译完成后,仅需保留vector.py
和相应的*.pyd
文件即可。