Как переопределить Py_GetPrefix (), Py_GetPath ()? - PullRequest
4 голосов
/ 18 июля 2009

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

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

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

Ответы [ 4 ]

4 голосов
/ 18 июля 2009

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

3 голосов
/ 19 ноября 2010

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

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

3 голосов
/ 18 июля 2009

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

0 голосов
/ 14 февраля 2018

Перед вызовом Py_Initialize () могут быть вызваны следующие функции:

  • Py_SetProgramName ()
  • Py_SetPythonHome ()
  • Py_SetPath ()

Все это влияет на способ, которым Python находит модули. Я рекомендую прочитать документацию об этих функциях и поиграть с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...