Cython的cpython.datetime.datetime_new导致分段错误

Pau*_*aul 1 python datetime cython

Cythondatetime.pyd公开了一个函数,它是s 的datetime_new包装器。但是,每当我实际尝试使用此函数时,即使具有有效值,我也会立即收到分段错误。这是 Cython 代码的最小工作示例:datetime.hPyDateTime_CAPI.DateTime_FromDateAndTime

cimport cpython.datetime

cpdef cpython.datetime.datetime construct_datetime():
    return cpython.datetime.datetime_new(2017, 12, 1, 12, 30, 15, 0, None)
Run Code Online (Sandbox Code Playgroud)

这里是setup.py

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('test_segfault.pyx'))
Run Code Online (Sandbox Code Playgroud)

如果我运行它,我会得到:

$ python setup.py build_ext --inplace > /dev/null
$ $ python -c 'from test_segfault import construct_datetime; construct_datetime()'
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

我在 Arch Linux、Python 3.6.1 上使用 Cython 版本 0.25.2:

$ python -c 'import sys; print(sys.version)'
3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Run Code Online (Sandbox Code Playgroud)

我这个功能用错了吗?我知道我可以cpython.datetime.datetime在这里调用标准构造函数,但datetime_new绕过范围检查,并且我试图了解额外的检查需要多少时间。