0
私はPython3プログラムをC++に埋め込みようとしています。加えながら、埋め込まれたPython3は、ローカルモジュールをインポートするときに例外を発生させます。
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作品をインポートするが、私自身のモジュールに障害が発生したインポート:
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;
}
を結果は以下の通りです:いくつかのチュートリアルやブログ記事を以下の後、私は失敗し、次のコードを取得します私のモジュールへの道が働いていたようです。