Skip to content

PyConfig.stdlib_dir does not affect sys._stdlib_dir #106718

Description

@Yhg1s

In Python 3.11, PyConfig gained a stdlib_dir attribute which is, as far as I can tell, supposed to override sys._stdlib_dir (which is used by importlib). No matter what I set it to or what else I set, however, it seems to be ignored. For example:

#include <Python.h>
#include <stdio.h>

extern wchar_t *_Py_GetStdlibDir(void);

int main(int argc, char **argv)
{
    PyStatus status;
    PyConfig config;
    PyConfig_InitPythonConfig(&config);
    PyConfig_SetString(&config, &config.stdlib_dir, L"/my/stdlib/dir");
    Py_InitializeFromConfig(&config);
    if (PyStatus_Exception(status)) {
        Py_ExitStatusException(status);
    }
    PyConfig_Clear(&config);
    fprintf(stderr, "stdlib_dir = '%ls'\n", _Py_GetStdlibDir());
    Py_Finalize();
}
% gcc -Wall $(/python/3.12-opt/bin/python3-config --cflags) -o testprogram testprogram.c $(/python/3.12-opt/bin/python3-config --ldflags) -lpython3.12
# Look ma, no warnings.
% ./testprogram
stdlib_dir = '/python/3.12-opt/lib/python3.12'

It doesn't seem to matter whether PyConfig.stdlib_dir is set to an existing directory either (although for my use-case, it must be a non-existant one; we're getting the stdlib from embedded data, and the incorrect setting of sys._stdlib_dir means importlib's FrozenImporter sets the wrong __file__ attribute on frozen/deepfrozen modules, like os.)

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

3.11only security fixes3.12only security fixes3.13only security fixestype-bugAn unexpected behavior, bug, or error

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions