18.11.17 16:17, Nick Coghlan пише:
On 18 November 2017 at 10:01, Victor Stinner <victor.stin...@gmail.com> wrote:
I'm writing this email to ask if this change is an issue or not to
embedded Python and the Python C API. Is it still possible to call
"all" functions of the C API before calling Py_Initialize()?
It isn't technically permitted to call any of them, unless their
documentation specifically says that calling them before
`Py_Initialize` is permitted (and that permission is only given for a
select few configuration APIs in
https://docs.python.org/3/c-api/init.html).
The Py_Initialize() is not complete. It mentions only
Py_SetProgramName(), Py_SetPythonHome() and Py_SetPath(). But in other
places it is documented that Py_SetStandardStreamEncoding(),
PyImport_AppendInittab(), PyImport_ExtendInittab() should be called
before Py_Initialize(). And the embedding examples call
Py_DecodeLocale() before Py_Initialize(). PyMem_RawMalloc(),
PyMem_RawFree() and PyInitFrozenExtensions() are called before
Py_Initialize() in Py_FrozenMain(). Also these functions call
_PyMem_RawStrdup().
Hence, the minimal set of functions that can be called before
Py_Initialize() is:
* Py_SetProgramName()
* Py_SetPythonHome()
* Py_SetPath()
* Py_SetStandardStreamEncoding()
* PyImport_AppendInittab()
* PyImport_ExtendInittab()
* Py_DecodeLocale()
* PyMem_RawMalloc()
* PyMem_RawFree()
* PyInitFrozenExtensions()
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com