diff options
| author | shadchin <[email protected]> | 2026-01-14 19:52:47 +0300 |
|---|---|---|
| committer | shadchin <[email protected]> | 2026-01-14 20:30:18 +0300 |
| commit | 078fd8aa66d488d1339cb64a5a3918e786b4baae (patch) | |
| tree | 8f88c448cb861883216c644dae3d0fc3bdfbd993 /contrib/tools/python3/Python | |
| parent | d980d7a650f4a3cfe8d1b7f030847b03d5c511e4 (diff) | |
Fix `__name__` for builtin modules
Такой же подход есть у загрузки so-расширений, но для builtin его из коробки нет, так как builtin в upstream используется только для стандартной библиотеки, а там нет подпакетов, там только модули и у них нет проблемы с именем.
До патча:
```ipython
In [1]: import osgeo._gdal
In [2]: osgeo._gdal.__name__
Out[2]: '_gdal' # <- Потерялось имя пакета, должно быть `osgeo._gdal`
```
После патча:
```ipython
In [1]: import osgeo._gdal
In [2]: osgeo._gdal.__name__
Out[2]: 'osgeo._gdal'
```
commit_hash:fee95110a58cae8395a46598bf8f0b80e42b029a
Diffstat (limited to 'contrib/tools/python3/Python')
| -rw-r--r-- | contrib/tools/python3/Python/import.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/contrib/tools/python3/Python/import.c b/contrib/tools/python3/Python/import.c index 8f8d5c25cb5..fe70169202c 100644 --- a/contrib/tools/python3/Python/import.c +++ b/contrib/tools/python3/Python/import.c @@ -1388,6 +1388,7 @@ is_builtin(PyObject *name) static PyObject* create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec) { + const char *oldcontext, *newcontext; PyObject *mod = import_find_extension(tstate, name, name); if (mod || _PyErr_Occurred(tstate)) { return mod; @@ -1401,7 +1402,13 @@ create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec) mod = PyImport_AddModuleObject(name); return Py_XNewRef(mod); } + newcontext = PyUnicode_AsUTF8(name); + if (newcontext == NULL) { + Py_RETURN_NONE; + } + oldcontext = _PyImport_SwapPackageContext(newcontext); mod = _PyImport_InitFunc_TrampolineCall(*p->initfunc); + _PyImport_SwapPackageContext(oldcontext); if (mod == NULL) { return NULL; } |
