Title: Expose a C-API function to allow custom importers to create a module using an init function · Issue #116146 · python/cpython · GitHub
Open Graph Title: Expose a C-API function to allow custom importers to create a module using an init function · Issue #116146 · python/cpython
X Title: Expose a C-API function to allow custom importers to create a module using an init function · Issue #116146 · python/cpython
Description: Feature or enhancement Proposal: See full details and discussion in this Discourse thread. To summarize: Custom importers may want to create a module object by directly calling the init function (e.g. because the module is a statically l...
Open Graph Description: Feature or enhancement Proposal: See full details and discussion in this Discourse thread. To summarize: Custom importers may want to create a module object by directly calling the init function (e...
X Description: Feature or enhancement Proposal: See full details and discussion in this Discourse thread. To summarize: Custom importers may want to create a module object by directly calling the init function (e...
Opengraph URL: https://github.com/python/cpython/issues/116146
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Expose a C-API function to allow custom importers to create a module using an init function","articleBody":"# Feature or enhancement\r\n\r\n### Proposal:\r\n\r\nSee full details and discussion in [this Discourse thread](https://discuss.python.org/t/c-api-for-initializing-statically-linked-extension-modules/43396).\r\n\r\nTo summarize:\r\n\r\nCustom importers may want to create a module object by directly calling the init function (e.g. because the module is a statically linked extension module, and inittab is not desired (i.e. due to performance or other considerations)).\r\nThis is currently not possible in all scenarios (i.e. when importing pybind11 submodules), because custom importers can't access the \"package context\" (`_PyRuntime.imports.pkgcontext`), or use the internal CPython function to swap package context (`_PyImport_SwapPackageContext`).\r\n\r\nFrom the [Discourse discussion](https://discuss.python.org/t/c-api-for-initializing-statically-linked-extension-modules/43396/32) it seems the preferred solution is to introduce a C-API function, `PyImport_ImportByInitFunc(const char *fullname, PyObject* (*initfunc)(void))` (exact signature up for bikeshedding, function \"stability\" should be discussed further).\r\n\r\nProposed implementation:\r\n\r\n```c\r\nPyObject*\r\nPyImport_ImportByInitFunc(const char* fullname, PyObject* (*initfunc)(void))\r\n{\r\n const char *oldcontext;\r\n PyObject* mod;\r\n oldcontext = _PyImport_SwapPackageContext(fullname);\r\n mod = _PyImport_InitFunc_TrampolineCall((PyModInitFunction)initfunc);\r\n _PyImport_SwapPackageContext(oldcontext);\r\n return mod;\r\n}\r\n```\r\n\r\n### Has this already been discussed elsewhere?\r\n\r\nI have already discussed this feature proposal on Discourse\r\n\r\n### Links to previous discussion of this feature:\r\n\r\nhttps://discuss.python.org/t/c-api-for-initializing-statically-linked-extension-modules/43396/32\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-139196\n* gh-141556\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/itamaro","@type":"Person","name":"itamaro"},"datePublished":"2024-02-29T20:44:02.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/116146/cpython/issues/116146"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:9f9575c1-6165-f8fe-2afd-13cb573a3807 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | EDCE:2F5405:19F79:21723:696AF7F0 |
| html-safe-nonce | 30241eb261a04a97e13fa52d38a26f8d9613ebf52a5984ea57a83ea095c7bdce |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFRENFOjJGNTQwNToxOUY3OToyMTcyMzo2OTZBRjdGMCIsInZpc2l0b3JfaWQiOiI0NTg2ODU5NjAxNjkxNjA0OTc3IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | bc95ffd23a18f827caeda869219e761bf2e17ee4684cb208e6ee34a18e3e1d63 |
| hovercard-subject-tag | issue:2162074863 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/116146/issue_layout |
| twitter:image | https://opengraph.githubassets.com/f116c202b53e44606c2191db514e4fac3c8f7fb874ba47c67a9032b9766ddaa5/python/cpython/issues/116146 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/f116c202b53e44606c2191db514e4fac3c8f7fb874ba47c67a9032b9766ddaa5/python/cpython/issues/116146 |
| og:image:alt | Feature or enhancement Proposal: See full details and discussion in this Discourse thread. To summarize: Custom importers may want to create a module object by directly calling the init function (e... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | itamaro |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 82560a55c6b2054555076f46e683151ee28a19bc |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width