Я только что создал библиотеку с Pybind11 со стороны C++: Я сделал это с помощью MSYS2, CMake и Make. (У меня установлены GCC, Make, CMake и Pybind11 с помощью команд)
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-pybind11
Вот пример.cpp
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function that adds two numbers");
}
Здесь CMakeLists.txt (в том же каталоге, что и example.cpp)
cmake_minimum_required(VERSION 3.3)
# Notre projet est étiqueté hello
project(example)
find_package(Python COMPONENTS Interpreter Development)
find_package(pybind11 CONFIG)
# pybind11 method:
pybind11_add_module(example example.cpp)
Затем я выполнил команды
mkdir buildmingw
cd buildmingw
cmake .. -G "MinGW Makefiles"
mingw32-make
и создается файл example.cp311-win_amd64.pyd.
Как я могу использовать этот файл сейчас в Python?
Я уже пытался поместить test.py в тот же каталог, что и example.cp311-win_amd64.pyd, а затем запустил:
python test.py
где test.py выглядит так:
import example
print( example.add(7,13 ) )
Я получаю сообщение об ошибке:
D:\Informatik\NachhilfeInfoUni\KadalaSchmittC++\PythonBindC++\buildmingw4>python tes
t.py
Traceback (most recent call last):
File "D:\Informatik\NachhilfeInfoUni\KadalaSchmittC++\PythonBindC++\buildmingw4\test.py", line 1, in <module>
import example
ImportError: DLL load failed while importing example: Das angegebene Modul wurde nicht gefunden.
Что я делаю не так? Как мне правильно импортировать мою библиотеку?






Судя по названию, ваш модуль расширения pybind11 скомпилирован с использованием Python 3.11. Вероятно, вы захотите проверить, использует ли последний вызов python test.py согласованную версию интерпретатора Python 3.11.
Альтернативно, вы можете создать venv и вызывать все команды (включая pip install, cmake, make и python test.py) с активированным venv.
Как я могу проверить, использует ли мой последний вызов python test.py согласованную версию интерпретатора Python. Если я скажу python --version, это даст мне 3.11.1
@ user172501 Рад слышать, что вы решили эту проблему. Как правило, это обратная сторона использования модулей расширения — вам нужно строить на основе любой целевой арки/версии/диалекта, который вы планируете поддерживать. Моя лучшая практика — использовать пакет-оболочку, чтобы скрыть импорт/загрузку нескольких модулей расширения, ориентированных на разные платформы.
Версия Python действительно была проблемой. У меня был установлен один Python из Python для Windows
Другая версия Python была установлена MSYS2 без моего ведома. Первая упомянутая версия Python находилась в каталоге C:\Python, и путь был настроен правильно. Я переименовал этот каталог в C:\PythonHidden.
Затем я снова запустил CMake и Make, как в вопросе. Теперь был создан файл example.cp311-mingw_x86_64.pyd.
И этот я мог бы импортировать.
Как узнать, действительно ли он скомпилирован под Python 3.11?? Или, если нет, то против какой другой версии? Если я наберу python --version в свой терминал, моя версия будет 3.11.1, которая тогда должна быть правильной. Мне также удалось запустить все из виртуальной среды, но там тоже версия Python 3.11.1 и я получаю такое же сообщение об ошибке.