安装
下载 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, Extension
mod_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 vector
v=vector.Vector(2,3)
v.display()
d=v.abs()
print(d)
输出:
(2,3)
3.605551275463989
发布
编译完成后,仅需保留vector.py
和相应的*.pyd
文件即可。