<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 26, 2017 at 11:00 AM, Skip Montanaro <span dir="ltr"><<a href="mailto:skip.montanaro@gmail.com" target="_blank">skip.montanaro@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I just got burned (wasted a good day or so) by the fact that PyDateTimeAPI wasn't initialized. The datetime.rst doc states (emphasis mine):<br><br><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">Before using any of these functions, the header file :file:`datetime.h` must be included in your source (note that this is not included by :file:`Python.h`), and the macro :c:macro:`PyDateTime_IMPORT` must be invoked, <b>usually as part of the module initialisation function</b>.<br><br></blockquote>I thought that surely the datetime module itself would initialize that stuff. Why not?</div></blockquote></div><br>It is fairly common for the modules that export C API in a capsule to only initialize that capsule when explicitly asked.  For example, if you want to use numpy C API, you need to call import_array() in your module initialization function. [1]  I don't know how expensive <span style="font-size:12.8px">PyDateTime_IMPORT is, but it cannot be called in _datetimemodule.c because it is guarded by the </span><span style="color:rgb(51,51,51);font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre">Py_BUILD_CORE </span><span style="font-size:12.8px">macro and is not available when </span><span style="font-size:12.8px">_datetimemodule.c itself is compiled.  I don't know whether this can be easily circumvented, but it is not hard to remember that one should initialize C API before using it.  Maybe we can improve the error message when</span></div><div class="gmail_extra">PyDateTime_IMPORT is forgotten.  Feel free to open an issue for that.<span style="font-size:12.8px"><br></span></div><div class="gmail_extra"><br></div><div class="gmail_extra">[1]: <a href="https://docs.scipy.org/doc/numpy-1.12.0/user/c-info.how-to-extend.html#required-subroutine">https://docs.scipy.org/doc/numpy-1.12.0/user/c-info.how-to-extend.html#required-subroutine</a> </div></div>