Я встроил Python в приложение, foo.exe
. Когда он запускается, вызывается Python и сразу ищет Lib
. Единственный способ заставить его работать - это поместить Lib
(Библиотека каталогов модулей Python) в местоположение как foo.exe
.
Есть ли способ, которым я могу перенаправить Python для поиска в другом месте, например Python/Lib
? Я не могу изменить PATH
(это окна), и я не хочу взламывать исходный код Python.
По сути, я не могу заставить Py_SetPath () работать, и я не смог найти практических примеров в интернете.
Обновление:
ОК, это работает:
#define MYMAXPATHLEN 1000
static wchar_t progpath[MYMAXPATHLEN + 1];
wchar_t* pdir = L"\\My_New_Location\\Python\\Lib";
wchar_t* pdelim = L";";
wchar_t* pypath = NULL;
GetModuleFileNameW(NULL, progpath, MYMAXPATHLEN);
reduce(progpath);
wcscat(progpath,pdir);
// I get the present module path and add the extra dirs to access Lib code
wcscat(progpath, pdelim); // I add a path delimiter
pypath = Py_GetPath();
wcscat(progpath, pypath);
// I add the paths that Py_GetPath() produces.
Py_SetPath(progpath);
Py_Initialize();
Я также вызываю Py_SetProgramName (); ПОСЛЕ Py_Initialize (); Я не уверен, что все эти дополнительные вещи нужны, но решения меньшего размера, похоже, дают сбой.
Кажется, что вызов Py_SetProgamName () ПОСЛЕ инициализации очень важен для правильной работы вызова встраивания.