Pybind11 не может получить Python код c в простом программном интерпретаторе встраивания в c ++ - PullRequest
0 голосов
/ 05 августа 2020

У меня есть простой cpp файл, который я пытаюсь использовать pybind11:scoped_interpreter guard{} в:

#include <pybind11/embed.h>

void main() {
    pybind11::scoped_interpreter guard{};
    pybind11::exec("print('hello world')");
}

Код отлично компилируется в pybind11app.exe. Однако, когда я пытаюсь запустить его из powershell 7, используя .\pybind11app.exe, я получаю следующую ошибку:

Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = (not set)
  program name = 'python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = 'C:\\Users\\ben.wolfley\\Desktop\\Test3\\vsstudio\\Debug\\pybind11app.exe'
  sys.base_prefix = 'C:\\Users\\ben.wolfley\\Anaconda3'
  sys.base_exec_prefix = 'C:\\Users\\ben.wolfley\\Anaconda3'
  sys.executable = 'C:\\Users\\ben.wolfley\\Desktop\\Test3\\vsstudio\\Debug\\pybind11app.exe'
  sys.prefix = 'C:\\Users\\ben.wolfley\\Anaconda3'
  sys.exec_prefix = 'C:\\Users\\ben.wolfley\\Anaconda3'
  sys.path = [
    'C:\\Users\\ben.wolfley\\Anaconda3\\python38.zip',
    '.\\DLLs',
    '.\\lib',
    'C:\\Users\\ben.wolfley\\Desktop\\Test3\\vsstudio\\Debug',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Если я пытаюсь отладить код в VS 2017, я получаю всплывающее окно с сообщением «Код выполнение не может продолжаться, потому что python38.dll не найден ". Это дает эту ошибку как с «Local Windows Debugger», так и с «Python / Native Debugger».

У меня установлен python 3.8 из anaconda. И python38.dll, и python .exe живут в C:\Users\ben.wolfley\Anaconda3. Я также убедился, что C:\Users\ben.wolfley\Anaconda3 находится в моей переменной среды Path.

Любая помощь в разрешении этой ошибки будет принята с благодарностью.

...