Как переопределить 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 (), но не указывать, как это сделать. Кто-нибудь знает, как я буду их переопределять?

3 Solutions collect form web for “Как переопределить 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 ».

  • Вложение IPython-оболочки в C / C ++ - программа
  • Эффективнее использовать if-return-return или if-else-return?
  • Как работает модуль и почему он отличается от Python, чем большинство языков?
  • использование cython для подключения модулей к python 3.1
  • C ++ Структура внутри себя?
  • Передача обработки делегата дочернему процессу в python
  • PyRun_String прекращает отправку результата в stdout после любой ошибки
  • Создание приложения для Mac и Windows GUI
  • Python - лучший язык программирования в мире.