2016-04-24 1 views
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; 
} 

を結果は以下の通りです:いくつかのチュートリアルやブログ記事を以下の後、私は失敗し、次のコードを取得します私のモジュールへの道が働いていたようです。

答えて

0

PyBytes_FromStringPyUnicode_DecodeFSDefaultに置き換えてインポートしました。私はなぜか分からない。