运行Python 3.5解释器需要哪些标准库模块?

bzz*_*zzr 8 python python-embedding python-3.x python-internals python-3.5

这是一个CPython程序,试图用空的初始化解释器sys.path:

#include <Python.h>

int main(int argc, char** argv)
{
    wchar_t* program = NULL;
    wchar_t* sys_path = NULL;

    Py_NoSiteFlag = 1;

    program = Py_DecodeLocale(argv[0], NULL);
    Py_SetProgramName(program);

    sys_path = Py_DecodeLocale("", NULL);
    Py_SetPath(sys_path);

    Py_Initialize();

    PyMem_RawFree(program);    
    PyMem_RawFree(sys_path);
    Py_Finalize();
}
Run Code Online (Sandbox Code Playgroud)

执行上述程序会引发以下错误:

Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Current thread 0x00007ffff7fc6700 (most recent call first):
Signal: SIGABRT (Aborted)
Run Code Online (Sandbox Code Playgroud)

那么除了encodings包之外,Python 3.5标准库中的哪些包和模块是运行Python 3.5解释器所必需的?在我的文档中似乎没有这些信息.

Jim*_*ard 7

这些是在翻译启动期间使用的包/模块(如@Charles Duffy在评论中所述,通过查看sys.modules).

结果取决于你是否site启用了(你Py_NoSiteFlag = 1;暗示这不是这种情况,但无论如何,我会给出两种选择:-)).

site拖了几个与它额外的模块,当你使用它喜欢_sitebuiltinsstat,在总,你可以使用Python只有以下运行:

abc.py               encodings       os.py         _sitebuiltins.py  sysconfig.py
codecs.py            genericpath.py  posixpath.py  site.py           _collections_abc.py  
io.py                stat.py         _weakrefset.py
Run Code Online (Sandbox Code Playgroud)

对于site残疾人,您将被剥离到以下内容6:

abc.py  codecs.py  encodings  io.py  os.py  _weakrefset.py
Run Code Online (Sandbox Code Playgroud)

当通过(或通过基于您的评论的Windows)调用时C,Py_Initialize()我猜os.py可能实际上并不需要.