• Python SIP安装配置(Win&Linux通用)


    Python中使用C/C++模块有许多工具,大名鼎鼎的有SWIG(英文意思为:豪饮)、SIP(英文意思为:啜饮,小口的喝),还有boost.python等。其中SIP是从SWIG发展而来,专为Python调用C/C++模块使用的(看SIP的命名就能看出来,很有意思的)。

    SIP的使用方法,在官网的SIP Reference Guide中有介绍,不过那是针对至少有点经验的人员,对初学者来说,想十分钟快速上手还是有点难度的。这里就介绍下本人在使用SIP总结的需要注意的地方。

    前提,本机上要装了Python、GCC(Windows下可以用MinGW)。并把python.exe和MinGW下的bin文件路径添加到环境变量中。

    SIP下载地址1: https://pypi.python.org/pypi/SIP#downloads

    SIP下载地址2: https://www.riverbankcomputing.com/software/sip/download

    第一部分:安装SIP

    Windows:

    将Riverbank上的sip的zip格式的代码包下载,将其解压到C:Python27中,那么现在sip的文件夹路径为C:Python27sip-4.13.2sip-4.13.2(你也可以将其解压到任何一个文件夹中,但这里为了叙述方便,就解压到我电脑上的Python的文件夹中)。

    打开Windows的cmd命令行,输如cd C:Python27sip-4.13.2sip-4.13.2跳转到sip文件夹下。

    输入python configure.py --platform win32-g++。进行配置,显示结果如下:

    再完成上一步后,输入mingw32-make,接着输入mingw32-make install。若无意外,SIP就安装完成了。

    常见问题:

    若是你的电脑上之前安装了Eclipse等其他软件,而将mingw32-make改成了make,那么就要将上面的mingw32-make命令改为make来使用。

    有个朋友说他按上面的方法使用make总是报错,仔细一问,才发现他的电脑上安装了Embacardero的RAD开发工具,也就是熟知的Delphi和C++ Builder的开发工具。在安装了这个工具后,在命令行中输入make,使用的总是Embacardero的C++ Builder的make。根据亲测,即使在配置的时候,使用python configure.py --platform win32-borland命令进行配置,对Emcarbadero的make也是无效的。这个配置命令产生的make文件,只是用于老版本的Borland C++ Builder的make命令。

    若要使用微软的VC的nmake,就要在配置时使用命令python configure.py --platform win32-msvc,其中win32-msvc使用的是VC6的nmake;win32-msvc.NET使用的是VC2003的nmake;win32-msvc2005使用的是VC2005的nmake;win32-msvc2008使用的是VC2008的nmake。根据--show-platforms命令显示的结果,SIP的配置暂不支持VC2010和VS11下的nmake。若想知道SIP支持的所有平台和编译器,可以在命令行中使用python configure.py --show -platforms命令来查看。

    Linux:

    linux下的SIP安装与之类似,甚至更简单,Linux的发行版如Ubuntu,都自动安装了python和gcc,无需配置环境变量。

    所以只要在官网上下载SIP的Linux下的tar.gz格式的代码包,解压到某个目录中。然后在终端中进入该目录,依次输入python configure.py --platform linux-g++;make;make install即可。

    在Python中使用C/C++写的函数。

    1、首先,编写个C文件,功能是将两个数字相加并输出,命名为add.c,这个将成为在Python中的模块名,如下:

    [cpp] view plain copy
    /* File : add.c */ 
    int add(int x, int y) 
    { 
    int g; 
    g = x + y; 
    return g; 
    } 


    2、接着,手工编写SIP文件,在使用SIP的过程中,一个C/C++的源码文件,必须对应一个同名的sip文件,命名为add.sip,如下:

    [plain] view plain copy
    /* Define the SIP wrapper to the add library. */ 
    %Module(name=add, language="C") 
    int add(int x, int y); 


    如果是源程序是用C++写的,那么这里的(name=add, language="C")就可以省去。
    这里的C源码文件没有头文件,所以对应的sip文件很简单。如果C/C++的源码是实现部分,在实现部分还包括接口部分,即头文件。那么在相应的sip文件中需要用

    [cpp] view plain copy
    %TypeHeaderCode 
    #include <word.h> 
    %End 


    来包含相应的头文件。sip文件与正式的C/C++头文件相似,但与之不同的是:sip文件不包含相应的头文件的私有成员变量(private或protected)。更详细的sip文件编写规范,请参考riverbank官方网站上的说明文档SIP Reference Guide。

    3、编译C文件。按照官网的说法,是编写configure.py,但别急,先做一些必不可少的工作。在命令行将add.c编译成add.o文件:输入

    [sql] view plain copy
    gcc -c add.c 


    接着,将这一步生成的add.o文件生产库文件:

    [plain] view plain copy
    ar -r libadd.a add.o 


    这两步在这里是为一个单独的C模块测试的,如果是大量的C模块,可以用一个makefile一并批量完成,这也是初学者容易模糊的地方。记住,需要将libadd.a文件复制到Python文件夹下的libs文件夹中。也可以将源代码直接编译成dll,命令为

    4、手工编写configure.py文件,同样,这个configure文件的编写也不难,看下规范就会了(要会鸟语。。。)。这里,我们模仿官网的模版写一个自己的configure.py。

    [python] view plain copy
    import os 
    import sipconfig 
    
    # The name of the SIP build file generated by SIP and used by the build 
    # system. 
    build_file = "add.sbf" 
    
    # Get the SIP configuration information. 
    config = sipconfig.Configuration() 
    
    # Run SIP to generate the code. 
    os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "add.sip"])) 
    
    # Create the Makefile. 
    makefile = sipconfig.SIPModuleMakefile(config, build_file) 
    
    # Add the library we are wrapping. The name doesn't include any platform 
    # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the 
    # ".dll" extension on Windows). 
    makefile.extra_libs = ["add"] 
    
    # Generate the Makefile itself. 
    makefile.generate() 


    5、运行configure.py,会生成一个makefile文件(直接用IDLE打开configure.py,按F5运行;或者命令行用python configure.py运行都可以)。
    这里有个诡异的地方,有几个朋友在这一步会报错,说找不到add.sbf文件,而add.sbf文件应该是configure.py运行时调用相关函数自动产生的。若出现这个问题,请重新编译SIP。如果是Windows下,最好是在另一台机器上拷贝一个完整的包含能正常的SIP的Python文件夹,到有问题的机器上,将问题Python文件夹覆盖掉。

    6、在命令行输入make(这里会生成一个关于函数的警告,不用管它,我们是用来测试的。。。其他的应该没什么问题,若有问题请检查前面的步骤),生成add.pyd文件。然后再输入make install(将add.pyd文件装入到Python的Lib文件夹下的sit-packages文件夹中)。

    7、打开Python 的命令行,进行测试:

    [python] view plain copy
    >>>import add 
    >>>add.add(4, 7) 
    11 
    >>> 


    (原谅我这么烂的模块名。。。)
    提示:

    (1)、这些文件可以放到Python的文件夹下新建的文件夹中(所有的操作在这个目录下的命令行窗口中使用)。注意,Python的父文件夹名不能有空格,否则会无法读取库文件。

    (2)、使用MinGW,需要把~MinGWin添加的环境变量中(Linux下则不必),这样才能使用gcc、make和ar等工具。

  • 相关阅读:
    MyBatis初学者配置
    hibernate错题解析
    Hibernate二级缓存配置
    Open Session In View
    Hibernate延迟加载Lazy
    ThreadLocal
    HQL基础查询语句
    Hibernate中saveOrUpdate()和merge()的区别
    springmvc的类型转换
    springmvc的初始化参数绑定
  • 原文地址:https://www.cnblogs.com/baotou/p/7468176.html
Copyright © 2020-2023  润新知