Python не видит скомпилированный сторонний модуль. Windows (msvc)
Здравствуйте!
Пытаюсь разобраться с Boost.Python
'ом. Взял простенький пример с функцией, собрал через CMake
.dll
-ку, переименовал .dll
в .pyd
, пытаюсь импортировать в .py
-скрипт, в итоге вылезает ошибка подгрузки dll
, не обнаружен модуль:
Traceback (most recent call last):
File "c:\Users\zofor\OneDrive\Рабочий стол\example\hello.py", line 2, in <module>
import modules.hello_ext
ImportError: DLL load failed while importing hello_ext: Не найден указанный модуль.
Windows 11, Компилятор MSVC 19.40 (vc143) x64, Boost 1.85.0
Исходные коды прилагаю, благо они маленькие:
Файл CmakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(hello_ext)
set(CMAKE_CXX_COMP)
set(CMAKE_CXX_STANDARD 17)
# find_package работать отказывался, поэтому ввел прямые пути
include_directories("C:/Libraries Files/boost_1_85_0")
include_directories("C:/Program Files/Python312/include")
link_directories("C:/Libraries Files/boost_1_85_0/lib64-msvc-14.3")
link_directories("C:/Program Files/Python312/libs")
add_library(hello_ext MODULE hello.cpp)
Библиотека собирается без каких либо проблем
Файл с реализацией библиотеки hello.cpp
, заголовочных файлов нет
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
И сам скрипт hello.py
import modules.hello_ext
print(hello_ext.greet())
hello_ext.pyd
находится в папке modules, __init__.py
в папке присутствует
Ответы (1 шт):
Проблему удалось решить добавлением boost.python
-овой .dll
в папку к компилируемому .pyd
-модулю. Все сразу заработало!
Видимо, в компилируемой dll
-ке не хранится информация, где искать связанные с ней сторонние dll
-ки, и система пытается найти их сама. При этом добавление пути к библиотекам boost
в PATH
ничего не дает!