От алка, похоже, связано с этой ошибкой: https://bugs.python.org/issue31532
Вот обходной путь, который я использую. Поскольку вы не можете вызвать Py_GetPath()
до Py_Initialize()
, а также, по-видимому, вы не можете вызвать Py_SetPath()
после Py_Initialize()
, вы можете добавить или получить путь, подобный этому, после вызова Py_Initialize()
:
#include <Python.h>
int main()
{
Py_Initialize();
// get handle to python sys.path object
PyObject *sys = PyImport_ImportModule("sys");
PyObject *path = PyObject_GetAttrString(sys, "path");
// make a list of paths to add to sys.path
PyObject *newPaths = PyUnicode_Split(PyUnicode_FromWideChar(L"a:b:c", -1), PyUnicode_FromWideChar(L":", 1), -1);
// iterate through list and add all paths
for(int i=0; i<PyList_Size(newPaths); i++) {
PyList_Append(path, PyList_GetItem(newPaths, i));
}
// print out sys.path after appends
PyObject *newlist = PyUnicode_Join(PyUnicode_FromWideChar(L":", -1), path);
printf("newlist = %ls\n", PyUnicode_AsWideCharString(newlist, NULL));
return 0;
}