代码之家  ›  专栏  ›  技术社区  ›  Falmarri

用C模块扩展python

  •  1
  • Falmarri  · 技术社区  · 15 年前

    所以我有一个C程序来连接i2c设备。我需要从python接口到那个设备。我只是想知道是否值得将程序移植到python模块中,或者移植所涉及的工作量是否超过仅仅使用子进程执行程序。我知道我确信每个应用程序都不一样,但我想知道是否值得花时间学习pythonc扩展并移植这个程序。

    5 回复  |  直到 15 年前
        1
  •  3
  •   Alex Martelli    15 年前

    有很多方法可以继续——PythonCAPI,这似乎是您正在考虑的方法,但是 SWIG Cython , ctypes (由于函数可以“从外部”调用),您有很多选择。我个人建议 Cython --它看起来越来越像Python的一个广泛子集,扩展到只允许有效地编译成机器代码和直接调用C库中的函数。

        2
  •  2
  •   Gilles 'SO- stop being evil'    15 年前

        3
  •  1
  •   lunaryorn    15 年前

    不要使用pythoncapi,还有更简单的替代方法,最著名的是cython。

    cython是一种类似Python的语言,它编译成pythonc库的C代码。基本上,它是C语言,具有Python语法和特性(例如,适合循环、异常等)。cython显然是为python编写C扩展的最值得推荐的方法。

        4
  •  0
  •   bstpierre Edgar Aviles    15 年前

    我使用ctypes很幸运。不管你选择什么,你可能都得不到时间 但是下一次你的努力要比用C来做整个事情快得多。

        5
  •  0
  •   Maister    15 年前

    我建议使用共享库的ctypes。不过,最好不要在C API中依赖结构之类的复杂类型。使用伪OOP方法是映射到Python的最简单方法。

    foo_t* foo_new(void);
    int foo_bar(foo_t*, int);
    int foo_baz(foo_t*, int);
    void foo_free(foo_t*);