встроить среду Python в приложение C ++ - PullRequest
1 голос
/ 26 июня 2019

Используя c-python api, я пытаюсь встроить python 3.6 в приложение c ++.Однако вместо установки системы я бы хотел использовать виртуальную среду.Я не нашел никакой документации о том, как это сделать.В некоторых сопутствующих документах упоминается

py_SetProgramName

или

py_SetPythonHome

Также при чтении кода на c-python я вижу использование файлов pvenv.cfg или ._pth, но ни одно из этих решенийпохоже, работает.

Есть идеи, как правильно использовать виртуальную среду из c api?

EDIT

Давайте рассмотрим конкретный пример.У меня установлен python в

c:\python36

Для своего приложения на c ++ я создал виртуальную среду, используя команду python -m venv c:\my_cpp_app\python_venv\ in:

c:\my_cpp_app\python_venv\

Используя API-интерфейс c-pythonчтобы мое приложение cpp использовало виртуальную среду, расположенную в python_venv вместо c:\python36\

1 Ответ

1 голос
/ 27 июня 2019

Как отмечалось в комментариях, встроенный Python 3.6 и виртуальная среда, созданные с помощью venv, кажутся несовместимыми ( bugs.python.org / issue22213 )

Мне удалось заставить его работать, используя virtualenv и позвонив Py_SetPythonHome до Py_Initialize. Подробнее о последовательности запуска python

Поиск Python и стандартной библиотеки

Местоположение Питона двоичная и стандартная библиотека под влиянием нескольких элементов. алгоритм, используемый для выполнения расчетов, нигде не документирован кроме как в исходном коде. Даже это описание неполное, так как его не удалось обновить для виртуальной среды добавлена ​​поддержка в Python 3.3 (подробно в PEP 405).

эти расчеты на которые влияют следующие вызовы функций (сделанные до вызова Py_Initialize ()) и переменные окружения:

  • Py_SetPythonHome()
  • Py_SetProgramName()
  • PYTHONHOME

Файловая система также проверяется на файлы pyvenv.cfg (см. PEP 405) или, если это невозможно, a lib/os.py (Windows) или lib/python$VERSION/os.py файл.

Настройки времени сборки для PREFIX и EXEC_PREFIX также актуальны, как и некоторые параметры реестра на Окна. Запасы в жестком коде основаны на макете Исходное дерево CPython и вывод результатов при работе с исходным кодом проверка.

Реализация pep 587 в более поздних версиях должна облегчить все это!

...