Макрос PyDateTime_IMPORT не инициализирует переменную PyDateTimeAPI - PullRequest
4 голосов
/ 23 октября 2009

Я использую Python C API в Windows, используя Visual Studio 2008. Когда я пытаюсь использовать макрос PyDate_Check и другие связанные макросы, они вызывают нарушение доступа, поскольку статическая переменная PyDateTimeAPI имеет значение null. Эта переменная инициализируется с помощью макроса PyDateTime_IMPORT, который необходимо вызвать перед использованием любых макросов даты и времени. Я делаю это при создании нового суб-интерпретатора Python в отдельном потоке.

Пара вопросов :
- Почему функция PyCObject_Import в макросе PyDateTime_IMPORT возвращает ноль. Я понимаю, нулевое возвращаемое значение, потому что модуль не может быть найден. Но как модуль datetime не может быть найден? Может ли это быть из-за неправильного sys.path в суб-интерпретаторе? - Кроме того, я вызываю макрос PyDateTime_IMPORT в правильном месте, это должно произойти сразу после инициализации суб-интерпретатора или при инициализации интерпретатора Python?

PyDateTime_IMPORT определение:

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

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Я столкнулся с этой же проблемой, используя G ++ и Python 3.2. У него есть кое-что для этого, так как PyDateTimeAPI объявлен в заголовке, каждый файл, который включает этот заголовок, получает собственную версию переменной.

0 голосов
/ 11 августа 2014

PyCObject устарел в 2.7 и удален в 3.x. PyCapsule_Import () следует использовать вместо PyCObject_Import ()

...