使用swig生成python模块的scons工具

scons-tool-swigp的Python项目详细描述


PyPi package versionTravis CI build statushttps://ci.appveyor.com/api/projects/status/github/ptomulik/scons-tool-swigpy?svg=true

SCons工具,使用Swig生成python模块。

安装

为您的项目安装此工具的方法很少。

来自pypi

如果在virtualenv下构建项目,则此方法可能更可取。到 从pypi添加swigpy工具,键入(在wirtualenv中):

pip install scons-tool-loader scons-tool-swigpy

或者,如果您的项目使用pipenv

pipenv install --dev scons-tool-loader scons-tool-swigpy

或者,您可以将其添加到您的Pipfile

[dev-packages]
scons-tool-loader = "*"
scons-tool-swigpy = "*"

该工具将作为命名空间包^{tt2}安装$ 在项目的虚拟环境中。您可以进一步使用scons-tool-loader 加载工具。

作为git子模块

  1. 创建新的git存储库:

    mkdir /tmp/prj &&cd /tmp/prj
    touch README.rst
    git init
    
  2. scons-tool-swigpy作为子模块添加:

    git submodule add git://github.com/ptomulik/scons-tool-swigpy.git site_scons/site_tools/swigpy
    
  3. 对于python 2.x,在site_tools目录中创建__init__.py

    touch site_scons/site_tools/__init__.py
    

    这将允许直接导入site_tools.swigpy(这可能是其他工具所必需的)。

用法示例

git项目
  1. 创建一些源文件,例如src/hello.hppsrc/hello.cpp

    // src/hello.hpp
    #ifndef HELLO_HPP
    #define HELLO_HPP
    voidhello();#endif
    // src/hello.cpp
    #include"hello.hpp"
    #include<iostream>voidhello(){std::cout<<"Hello"<<std::endl;}
  2. 创建swig接口文件src/hello.i

    // src/hello.i
    %modulehello;%{#include"hello.hpp"%}%include"hello.hpp"
  3. 写入SConstruct文件:

    # SConstructenv=Environment(tools=['default','swigpy'])SConscript('src/SConscript',exports=['env'],variant_dir='build',duplicate=0)
  4. 写入src/SConscript

    # src/SConscriptImport(['env'])env.Append(SWIGPY_CPPPATH=['.'])env.Append(SWIGPY_LIBPATH=['.'])env.Append(SWIGPY_SWIGFLAGS=['-c++'])env.SharedLibrary('hello',['hello.cpp'])env.SwigPyModule('hello',SWIGPY_LIBS=['$SWIGPY_PYTHONLIB','hello'])
  5. 试试看:

    scons
    

    这将创建库build/libhello.so和所有 组成它的python包装器:

    ptomulik@tea:$ ls build/
    hello.os  hello.pyc  hello_wrap.cc  libhello.so
    hello.py  _hello.so  hello_wrap.os
    
  6. 测试生成的包装:

    cd build
    LD_LIBRARY_PATH='.' python
    >>> import hello
    >>> hello.hello()

详细信息

模块说明

模块提供了一个生成python模块的SwigPyModule()builder 基于swig接口*.i文件:

SwigPyModule(modname, **overrides)

modname是正在生成的模块的名称,例如'foo' 或者'foo.bar'(注意,它既不是源文件名也不是目标文件 姓名)。重写重写构造变量,如SWIGFLAGSCFLAGS

示例1

以下代码要求存在一个foo.i接口文件,并且 生成由该文件定义的python模块。

SwigPyModule('foo')

示例2

以下代码要求存在一个foo/bar.i接口文件 并生成由这个文件undeffoo子目录定义的python模块。

SwigPyModule('foo.bar')

构造变量

SwigPyModule使用的构造变量总结如下 桌子。注意有两组变量。第一组是 众所周知的变量,如CFLAGSSWIGFLAGS。第二组是 以SWIGPY_为前缀的变量。如果定义了这些变量,则覆盖 生成python绑定时的已知变量。

VariableDefault
SWIG
SWIGVERSION
SWIGFLAGS
SWIGDIRECTORSUFFIX
SWIGCFILESUFFIX
SWIGCXXFILESUFFIX
SWIGPATH
SWIGINCPREFIX
SWIGINCSUFFIX
SWIGCOM
CPPPATH
SHLIBPREFIX
CCFLAGS
CFLAGS
CXXFLAGS
LIBS
LIBPATH
LDFLAGS
SWIGPY_SWIG
SWIGPY_SWIGVERSION
SWIGPY_SWIGFLAGS^{tt24}$
SWIGPY_SWIGDIRECTORSUFFIX
SWIGPY_SWIGCFILESUFFIX
SWIGPY_SWIGCXXFILESUFFIX
SWIGPY_SWIGPATH
SWIGPY_SWIGINCPREFIX
SWIGPY_SWIGINCSUFFIX
SWIGPY_SWIGCOM
SWIGPY_CPPPATH^{tt25}$
SWIGPY_SHOBJPREFIX
SWIGPY_SHOBJSUFFIX
SWIGPY_SHLIBPREFIX^{tt26}$
SWIGPY_SHLIBSUFFIX^{tt27}$ on Windows
SWIGPY_LIBPREFIX^{tt26}$
SWIGPY_LIBSUFFIX
SWIGPY_IMPLIBPREFIX^{tt26}$
SWIGPY_IMPLIBSUFFIX
SWIGPY_WINDOWSEXPPREFIX^{tt26}$
SWIGPY_WINDOWSEXPSUFFIX
SWIGPY_CC
SWIGPY_CXX
SWIGPY_SHCC
SWIGPY_SHCXX
SWIGPY_CCFLAGS
SWIGPY_CFLAGS
SWIGPY_CXXFLAGS
SWIGPY_SHCCFLAGS
SWIGPY_SHCFLAGS
SWIGPY_SHCXXFLAGS
SWIGPY_LIBS^{tt31}$
SWIGPY_LIBPATH^{tt32}$
SWIGPY_LINKFLAGS
SWIGPY_M2SWIGFILE^{tt33}$
SWIGPY_M2CFILE^{tt34}$
SWIGPY_M2SHLIBFILE^{tt34}$

swigpy_m2swigfilelambda确定swig接口的名称(source 文件)。swigpy_m2cfile确定c的名称(不带后缀) 或^ {STR 1 } $C++< /Stult>包装文件由^ {STR 1 } $SWIG < /强>生成。swigpy_m2shlib文件 确定将包含包装器二进制代码的共享库的名称 编译后(没有前缀和后缀)。部分提供给 这些宏是modname的一部分,这是 modname.split('.')

许可证

版权所有(c)2014-2018 Pawel Tomulik<;ptomulik@meil.pw.edu.pl>;

兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的用户 有条件这样做,但须遵守以下规定不良反应条件:

上述版权公告及本许可公告须包括在 软件的拷贝或大部分。

软件按原样提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 适合某一特定目的和非侵犯性。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在诉讼或合同中,侵权行为或其他,产生于, 不属于或与本软件有关,或使用或与本软件的其他交易有关。 软件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
试图读取字段“java”。lang.反对安卓。util。一对首先   gradle对java的影响。属性作为任务的输入?   java我的return语句不起作用。我做错了什么?   java通用同步代码块[无对象锁定]   macos Java小程序游戏不能在Mac上运行,即使它可以在PC上运行   java Firebase GeoFire设置位置未在服务中工作   java排序字符串对象   java通过JLabel上传背景图像(jpg)后,如何将图像缩放到它所在的面板上?   java无法连接到jsp中的数据库   java如何在整个ant taskdef操作的执行过程中拥有一个singleton类实例   java如何在按键事件中检查JTtextField中的字符串数字验证器   如何最好地输出大型单行XML文件(使用Java/Eclipse)?   内存不足,Java运行时环境无法在Java应用程序中继续运行   java Hibernate连接错误:组织上的NullPointerException。冬眠hql。阿斯特。HqlSqlWalker。createFromJoinElement   linux将参数从shell脚本传递到java类   java对于接受多个参数的setter是否有类似于@JsonCreator的注释?   java在链表中添加节点