Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
[PEP 741] gh-107954: Add PyInitConfig C API#110176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
vstinner commentedOct 1, 2023
vstinner commentedOct 1, 2023
TODO: once we reach an consensus on the API, I will document the API. |
vstinner commentedNov 30, 2023
I documented the API. I decided to add a new |
encukou left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Thank you!
Now that I see all the docs, it looks the design is missing a function:https://discuss.python.org/t/fr-allow-private-runtime-config-to-enable-extending-without-breaking-the-pyconfig-abi/18004/49?u=encukou
I also have a few docs nitpicks. I didn't look very closely at the implementation yet.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Doc/c-api/config.rst Outdated
| Return ``-1`` if Python wants to exit and on error. Call | ||
| :c:func:`Py_ExitWithInitConfig` in this case. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
What happens if you don't call it? (If it needs to be called, why doesPy_InitializeFromInitConfig not call it itself?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
The idea is to let the caller decide how to handle an error or an exit code. When you embed Python, you may not want the process to exit. It's a similar design thanPy_InitializeFromConfig() and thePyStatus C API.
What happens if you don't call it?
Python is in an undefined state. The error/exit code stays in PyInitConfig. It's safer to handle the init error :-)
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
fee8cc4 to7d59519Comparevstinner commentedDec 1, 2023
This change is quite big, so I moved PyConfig_Get() API to a separated PR: PR#112609. |
Add PyInitConfig functions:* PyInitConfig_Python_New()* PyInitConfig_Isolated_New()* PyInitConfig_Free(config)* PyInitConfig_SetInt(config, key, value)* PyInitConfig_SetStr(config, key, value)* PyInitConfig_SetWStr(config, key, value)* PyInitConfig_SetStrList(config, key, length, items)* PyInitConfig_SetWStrList(config, key, length, items)* PyInitConfig_Exception(config)* PyInitConfig_GetError(config, &err_msg)* PyInitConfig_GetExitCode(config, &exitcode)Add also functions using it:* Py_InitializeFromInitConfig(config)* Py_ExitWithInitConfig(config)Add these functions to the limited C API.Changes:* Add Doc/c-api/config.rst.* Add Include/initconfig.h header.
vstinner commentedDec 20, 2023
This API is kind of complicated (there are multiple use cases). I created PR#112609 as a starting point, just to add two functions. But apparently, adding PyConfig_Get() and PyConfig_GetInt() functions is more complicated than what I expected. I don't have the bandwidth to deal with such large API for now, so I prefer to close the PR. See also mycomment on the PyConfig_Get() PR. |
vstinner commentedAug 30, 2024
New PR:#123502 |
Uh oh!
There was an error while loading.Please reload this page.
Add PyInitConfig functions:
Add also functions using it:
Changes:
Discussion:https://discuss.python.org/t/fr-allow-private-runtime-config-to-enable-extending-without-breaking-the-pyconfig-abi/18004/20