【问题标题】:Building Python: how to disable Py_LIMITED_API?构建 Python:如何禁用 Py_LIMITED_API?
【发布时间】:2018-11-03 09:09:45
【问题描述】:

哪些配置标志/制作标志对此负责?

如果我不启用它,我就没有缓冲区 API。更不用说将其设为默认值不是一个好主意……而且该文档没有提到使用某些 Python 的 API 是基于此编译时设置的……

实际上,它也不是使用 Python 3.5 构建的。我误读了诊断信息。

【问题讨论】:

    标签: python python-3.x build


    【解决方案1】:

    以下setup.py 示例将编译foo.cpp 以将py_limited_api 设置为False

    from setuptools import setup, Extension
    
    setup(
        name='foo',
        ext_modules=[Extension('foo', ['foo.cpp'], py_limited_api=False)],
    )
    

    确保在包含Python.h之前没有#define Py_LIMITED_API ...

    您可以使用以下语句测试Py_LIMITED_API 的存在:

    #ifdef Py_LIMITED_API
    #error Py_LIMITED_API is set
    #endif
    #include <Python.h>
    ...
    

    编辑:

    你可以通过运行编译模块:

    python setup.py build_ext --inplace
    

    或者通过创建一个轮子:

    python setup.py bdist_wheel
    

    【讨论】:

    • 一方面这很有趣……另一方面:它没有帮助。 Py_LIMITED_API 未设置,但类型 Py_Buffer 仍然不可用...
    • Here 是我的一个简单模块,它使用 Buffer 协议公开对象。把它和你的比较一下。
    • 这完全是我的错:应该是Py_buffer,而不是Py_Buffer
    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2011-09-20
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多