Я пытаюсь следовать инструкциям Вот использовать Boost.Python. Исходный код находится на этой веб-странице. Я могу скомпилировать, связать этот простой пример кода, но я не могу импортировать полученный модуль в командной строке Python. Это всегда ошибка:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named hello_ext
Я понятия не имею, в чем дело, потому что эта страница просто говорит: «Вот и все. Мы закончили. Теперь мы можем построить это как общую библиотеку. Полученная DLL теперь видима для Python». Это моя строительная среда:
Итак, не могли бы вы сказать мне, как импортировать модуль в Python? Большое спасибо.
Я решил проблему сам. Спасибо jagerman за его полезные предложения.
(1) Просто измените имя выходного файла с ConsoleApplication1.dll на hello_ext.pyd. Вы можете автоматизировать это переименование, установив Pages-> General-> Target Extension в «.pyd». Убедитесь, что файл hello_ext.pyd находится в пути поиска Python. Вы можете просто бросить его в C: \ Python27 \ DLLs, который является одним из встроенных путей поиска python.
(2) Теперь вы получите другую ошибку импорта: сбой загрузки DLL: указанный модуль не найден. Если вы внимательно посмотрите на размер файла hello_ext.pyd, вы, вероятно, заметите что-то проводное — это всего 19 КБ. Это означает, что он не содержит всего необходимого для импорта в python, поэтому python должен найти недостающую часть, чтобы правильно импортировать ее. Да, вы можете догадаться, что — единственно возможный недостающий материал — это библиотеки Boost.Python, поэтому добавьте путь к нему в переменную среды PATH — для меня это C: \ local \ boost_1_64_0 \ lib64-msvc-14.0.
Тогда проблема решена. Примечание: некоторые ответы на другие связанные вопросы могут предлагать сборку как статическую библиотеку. Таким образом, вы получите еще одну ошибку импорта: сбой загрузки DLL:% 1 не является допустимым приложением Win32. Так что просто постройте как DLL. PS: вам не нужно указывать boost_python-vc140-mt-1_64.lib или boost_python-vc140-mt-gd-1_64.lib на страницах свойств-> Linker-> Input-> Additional Dependencies, как предлагалось в некоторых комментариях.
Других решений пока нет …