簡體   English   中英

嵌入式Python3導入本地模塊時引發異常

[英]Embedded Python3 raise an exception when importing a local module

我正在嘗試將Pyhton3程序嵌入到C ++中。 在完成了一些教程和博客文章之后,我得到了以下代碼,但失敗了:

Py_SetProgramName(_program_name);
Py_Initialize();

PyObject* main = PyImport_AddModule("__main__");
PyObject* globalDictionary = PyModule_GetDict(main);
PyObject* localDictionary = PyDict_New();
//create the dictionaries as shown above
PyObject* pythonpath = PySys_GetObject("path");
if (PyList_Append(pythonpath, PyBytes_FromString("/path/to/my/modules")) ==  -1)
{
  std::cerr << "Failed to append to python path" << std::endl;
  PyErr_Print();
}
const char* pythonScript = ""
"import sys\n"
"print('Hello')\n"
"import options\n"
"print('World')\n"
"";
PyObject* returnValue = PyRun_String(pythonScript, Py_file_input, globalDictionary, localDictionary);
if (!returnValue)
{
  std::cerr << "python raised an exception" << std::endl;
  PyErr_Print();
  return 1;
}

結果如下:

Hello
python raised an exception
Traceback (most recent call last):
  File "<string>", line 5, in <module>
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2222, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 2164, in _find_spec
  File "<frozen importlib._bootstrap>", line 1940, in find_spec
  File "<frozen importlib._bootstrap>", line 1914, in _get_spec
  File "<frozen importlib._bootstrap>", line 2049, in find_spec
  File "<frozen importlib._bootstrap>", line 53, in _path_join
  File "<frozen importlib._bootstrap>", line 53, in <listcomp>
TypeError: 'str' does not support the buffer interface

因此,導入sys可以,但是導入我自己的模塊失敗,而將路徑添加到模塊中似乎可以正常工作。

任何想法 ?

更換PyBytes_FromString通過PyUnicode_DecodeFSDefault所做的工作進口。 我不明白為什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM