mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-06-06 18:04:54 +02:00
61 lines
3 KiB
Diff
61 lines
3 KiB
Diff
commit 07773617f339a2779aa7cf910c0361c937ffe4c2
|
||
Author: Kefu Chai <tchaikov@gmail.com>
|
||
Date: Sat Feb 3 19:49:13 2024 +0800
|
||
|
||
mgr: set argv for python in PyModuleRegistry
|
||
|
||
before this change, we setup the progname for Python interpreter,
|
||
but setup the argv for it in PyModule. and we are using deprecated
|
||
API to initialize Python interpreter.
|
||
|
||
in this change, let's do this in a single place for better
|
||
maintainability. also, take this opportunity, to use the non-deprecated
|
||
API to initialize interpreter on Python >= 3.8.
|
||
|
||
this silence the warning when compiling ceph-mgr with CPython 3.12:
|
||
```
|
||
/var/ssd/ceph/src/mgr/PyModule.cc: In member function ‘int PyModule::load(PyThreadState*)’:
|
||
/var/ssd/ceph/src/mgr/PyModule.cc:363:20: warning: ‘void PySys_SetArgv(int, wchar_t**)’ is deprecated [-Wdeprecated-declarations]
|
||
363 | PySys_SetArgv(1, (wchar_t**)argv);
|
||
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
|
||
In file included from /usr/include/python3.12/Python.h:96,
|
||
from /var/ssd/ceph/src/mgr/BaseMgrModule.h:4,
|
||
from /var/ssd/ceph/src/mgr/PyModule.cc:14:
|
||
/usr/include/python3.12/sysmodule.h:13:38: note: declared here
|
||
13 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **);
|
||
| ^~~~~~~~~~~~~
|
||
```
|
||
|
||
Signed-off-by: Kefu Chai <tchaikov@gmail.com>
|
||
|
||
diff --git a/src/mgr/PyModule.cc b/src/mgr/PyModule.cc
|
||
index 0591e2c7145..a723b1ebd55 100644
|
||
--- a/src/mgr/PyModule.cc
|
||
+++ b/src/mgr/PyModule.cc
|
||
@@ -357,10 +357,6 @@ int PyModule::load(PyThreadState *pMainThreadState)
|
||
return -EINVAL;
|
||
} else {
|
||
pMyThreadState.set(thread_state);
|
||
- // Some python modules do not cope with an unpopulated argv, so lets
|
||
- // fake one. This step also picks up site-packages into sys.path.
|
||
- const wchar_t *argv[] = {L"ceph-mgr"};
|
||
- PySys_SetArgv(1, (wchar_t**)argv);
|
||
// Configure sys.path to include mgr_module_path
|
||
string paths = (g_conf().get_val<std::string>("mgr_module_path") + ':' +
|
||
get_site_packages() + ':');
|
||
diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc
|
||
index 0d2650d6e59..8ef532c8662 100644
|
||
--- a/src/mgr/PyModuleRegistry.cc
|
||
+++ b/src/mgr/PyModuleRegistry.cc
|
||
@@ -69,6 +69,11 @@ void PyModuleRegistry::init()
|
||
PyStatus status;
|
||
status = PyConfig_SetString(&py_config, &py_config.program_name, WCHAR(MGR_PYTHON_EXECUTABLE));
|
||
ceph_assertf(!PyStatus_Exception(status), "PyConfig_SetString: %s:%s", status.func, status.err_msg);
|
||
+ // Some python modules do not cope with an unpopulated argv, so lets
|
||
+ // fake one. This step also picks up site-packages into sys.path.
|
||
+ const wchar_t* argv[] = {L"ceph-mgr"};
|
||
+ status = PyConfig_SetArgv(&py_config, 1, (wchar_t *const *)argv);
|
||
+ ceph_assertf(!PyStatus_Exception(status), "PyConfig_SetArgv: %s:%s", status.func, status.err_msg);
|
||
// Add more modules
|
||
if (g_conf().get_val<bool>("daemonize")) {
|
||
PyImport_AppendInittab("ceph_logger", PyModule::init_ceph_logger);
|