Jovito Jovito - 15 days ago 8
Python Question

Which standard library modules are required to run the Python 3.5 interpreter?

Here's a CPython program that tries to initialize the interpreter with an empty

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();
}


Executing the program above raises the following error:

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)


So which of the packages and modules in the Python 3.5 standard library, besides the
encodings
package, are absolutely required to run the Python
3.5
interpreter? This information seems to me absent from the documentation.

Answer

These are packages/modules that are used during interpreter start-up (as, @Charles Duffy noted in a comment, by looking in sys.modules.

The result depends on whether you have site enabled or not (your Py_NoSiteFlag = 1; implies this isn't the case but anyway, I'll give both options :-).

With site enabled, you could run Python using the following:

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

and, with site disabled, you're stripped down to the following 6:

abc.py  codecs.py  encodings  io.py  os.py  _weakrefset.py

when invoked through C with Py_Initialize() I'm guessing os.py might not be actually needed.