【发布时间】:2018-11-03 09:09:45
【问题描述】:
哪些配置标志/制作标志对此负责?
如果我不启用它,我就没有缓冲区 API。更不用说将其设为默认值不是一个好主意……而且该文档没有提到使用某些 Python 的 API 是基于此编译时设置的……
实际上,它也不是使用 Python 3.5 构建的。我误读了诊断信息。
【问题讨论】:
标签: python python-3.x build
哪些配置标志/制作标志对此负责?
如果我不启用它,我就没有缓冲区 API。更不用说将其设为默认值不是一个好主意……而且该文档没有提到使用某些 Python 的 API 是基于此编译时设置的……
实际上,它也不是使用 Python 3.5 构建的。我误读了诊断信息。
【问题讨论】:
标签: python python-3.x build
以下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 仍然不可用...
Py_buffer,而不是Py_Buffer。