4

我正在使用 Visual Studio 2008 在 Windows 上使用 Python C API。当我尝试使用PyDate_Check宏和其他相关宏时,它们会导致访问冲突,因为静态变量 PyDateTimeAPI 为空。此变量使用PyDateTime_IMPORT需要在使用任何日期时间宏之前调用的宏进行初始化。我在单独的线程上创建新的 Python 子解释器时这样做。

几个问题
- 为什么宏PyCObject_Import中的函数PyDateTime_IMPORT返回 null。我理解 null 返回值是因为找不到模块。但是怎么找不到 datetime 模块呢?可能是因为子解释器中的 sys.path 不正确吗?- 另外,我是否PyDateTime_IMPORT在正确的位置调用宏,应该是在初始化子解释器之后,还是在初始化 Python 解释器时?

PyDateTime_IMPORT定义:

#define PyDateTime_IMPORT \
    PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_Import("datetime", \
                                                        "datetime_CAPI")`
4

2 回答 2

3

我使用 G++ 和 Python 3.2 遇到了同样的问题。由于在标头中声明了 PyDateTimeAPI,因此它有一些作用,包含该标头的每个文件都会获得自己的变量版本。

于 2011-03-17T22:07:45.317 回答
0

PyCObject 在 2.7 中被弃用,在 3.x 中被移除。应该使用 PyCapsule_Import() 而不是 PyCObject_Import()

于 2014-08-11T05:28:38.957 回答