Как переопределить Py_GetPrefix (), Py_GetPath ()?

Я пытаюсь внедрить интерпретатор Python и должен настроить способ загрузки стандартной библиотеки Python. Наша библиотека будет загружена из того же каталога, что и исполняемый файл, а не из префикса / lib /.

Мы успешно выполнили эту работу, вручную изменив sys.path после вызова Py_Initialize (), однако это порождает предупреждение, поскольку Py_Initialize ищет site.py в ./lib/, и его нет до тех пор, пока не будет вызван Py_Initialize и мы обновили sys.path.

Python c-api docs подсказывает, что можно переопределить Py_GetPrefix () и Py_GetPath (), но не указывать, как это сделать. Кто-нибудь знает, как я буду их переопределять?

Вы можете установить Py_NoSiteFlag = 1 , вызывать PyInitialize и импортировать site.py самостоятельно по мере необходимости.

Рассматривали ли вы использование putenv для настройки PYTHONPATH перед вызовом Py_Initialize?

Я вижу, что это было задано давно, но я просто попал в ту же проблему. Py_NoSiteFlag поможет с модулем сайта, но, как правило, лучше переписать Modules/getpath.c ; Документы Python официально рекомендуют это для приложения «[a] n, требующего полного контроля». Python действительно импортирует некоторые модули во время инициализации (тот, который ударил меня, был encodings ), поэтому, если вы не хотите их или не встроили в них, путь поиска модуля должен быть готов до вызова Py_Initialize() .

Из того, что я понимаю, Py_GetPath просто возвращает путь поиска модуля; Py_GetProgramFullPath является самоописанием; и Py_GetPrefix и Py_GetExecPrefix не используются кем-либо, кроме какого-то таинственного « ILU ».