Case
Я создал проект C ++ под названием «EmbedPython» в Visual Studio. В результате я хочу встроить Python API в C ++ с pybind11.
Мой проект Visual Studio
В целях тестирования я создал собственный модуль calc с методом , добавив и поместив его в ту же папку. С calc.py работает импорт.
py::object calc = py::module::import("calc");
Мой код для разыскиваемого API
#include <pybind11/embed.h> // everything needed for embedding
#include <iostream>
#include <exception>
namespace py = pybind11;
int main()
{
py::scoped_interpreter guard{}; // start the interpreter and keep it alive
try
{
py::object pyObj = py::module::import("instagram_private_api").attr("Client").attr("ClientCompatPatch");
}
catch (std::exception &e)
{
std::cout << e.what() << std::endl;
}
int i;
std::cin >> i;
}
Проблема
Доступ к нарушению чтения ... происходит. Что я делаю не так?
Вот документация pybind11, которая должна помочь: https://pybind11.readthedocs.io/en/...object.html#accessing-python-libraries-from-c
Код ошибки
['F:\\Programmieren\\C++\\meine C++ - Projekte\\EmbedPython\\x64\\Release\\python36.zip', 'F:\\Programmieren\\C++\\meine C++ - Projekte\\EmbedPython\\EmbedPython\\DLLs', 'F:\\Programmieren\\C++\\meine C++ - Projekte\\EmbedPython\\EmbedPython\\lib', 'F:\\Programmieren\\C++\\meine C++ - Projekte\\EmbedPython\\x64\\Release', '.']
AssertionError: SRE module mismatch
At:
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\EmbedPython\lib\sre_compile.py(17): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\EmbedPython\lib\re.py(123): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\EmbedPython\lib\tokenize.py(33): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\EmbedPython\lib\linecache.py(11): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\EmbedPython\lib\traceback.py(5): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\EmbedPython\lib\logging\__init__.py(26): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\x64\Release\instagram_private_api\client.py(8): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
F:\Programmieren\C++\meine C++ - Projekte\EmbedPython\x64\Release\instagram_private_api\__init__.py(3): <module>
<frozen importlib._bootstrap>(219): _call_with_frames_removed
<frozen importlib._bootstrap_external>(678): exec_module
<frozen importlib._bootstrap>(665): _load_unlocked
<frozen importlib._bootstrap>(955): _find_and_load_unlocked
<frozen importlib._bootstrap>(971): _find_and_load
Дополнительный
Насколько я понимаю из Python, модуль - это просто .py со своим содержимым, похожим на класс. Поэтому вызывается модуль calc с методом add. Это правильно?
import calc
calc.add()
Тогда где же находится instagram_private_api.py в API Python?
О себе
Главным образом, я разрабатываю с C ++. Я делаю Python в течение нескольких дней и только потому, что мне нужен API выше.