Как импортировать модуль, созданный с помощью Pybind11 в Ubuntu - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь настроить проект CMake, который создает привязки Python для своих функций c ++, используя pybind11 в Ubuntu.

Структура каталогов:

pybind_test
    arithmetic.cpp
    arithmetic.h
    bindings.h
    CMakeLists.txt
    main.cpp
    pybind11 (github repo clone)
        Repo contents (https://github.com/pybind/pybind11)

Файл CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(pybind_test)

set(CMAKE_CXX_STANDARD 17)

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(pybind11/include/pybind11)

add_executable(pybind_test main.cpp arithmetic.cpp)

add_subdirectory(pybind11)
pybind11_add_module(arithmetic arithmetic.cpp)

target_link_libraries(pybind_test ${PYTHON_LIBRARIES})

Репозиторий успешно создается и создается файл arithmetic.cpython-36m-x86_64-linux-gnu.so.Как мне импортировать этот общий объектный файл в python?

В документации в документации по pybind11 есть эта строка

$ c++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`

, но я хочу собрать с использованием CMake, и мне также не нужно указывать дополнительные каталоги include каждый раз, когда я запускаю pythonиспользовать этот модуль.

Как мне импортировать этот общий объектный файл в python, как обычный модуль python?

Я использую Ubuntu 16.04.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Помимо решения задания пути в скрипте Python, представленного @super, у вас есть еще два общих решения.

Настройка PYTHONPATH

Существует переменная окружения в Linux (и macOS) называется PYTHONPATH.Если вы добавите путь, содержащий ваш *.so к PYTHONPATH до вызова Python, Python сможет найти вашу библиотеку.

Для этого:

export PYTHONPATH="/path/that/contains/your/so":"${PYTHONPATH}"

Комуприменять это «автоматически» для каждого сеанса, вы можете добавить эту строку к ~/.bash_profile или ~/.bashrc (см. ту же ссылку).В этом случае Python всегда сможет найти вашу библиотеку.

Копирование вашего пути в путь уже в пути Python

Вы также можете «установить» библиотеку.Обычный способ сделать это - создать файл setup.py.При правильной настройке вы можете собрать и установить свою библиотеку, используя

python setup.py build
python setup.py install

(Python будет знать, где разместить вашу библиотеку. Вы можете немного «настроить» с помощью опции, подобной --user, чтобы использовать свой домашнийпапку, но это, кажется, не представляет особого интереса для вас.)

Остается вопрос: Как написать setup.py?Для вашего случая вы можете позвонить CMake.На самом деле существует пример, который делает именно это: pybind / cmake_example .Вы можете в основном копировать-вставить оттуда.

0 голосов
/ 04 июня 2018

Если вы откроете терминал, перейдите в каталог, в котором находится arithmetic.cpython-36m-x86_64-linux-gnu.so, и запустите python, а затем import arithmetic модуль будет импортирован, как и любой другой модуль.

Другой вариант -используйте метод

import sys

sys.path.insert(0, 'path/to/directory/where/so-file/is')
import arithmetic

С этим методом вы можете использовать как относительный, так и абсолютный путь.

...