Как импортировать или установить предварительно созданный модуль расширения Python (C ++) (т.е. библиотека не скомпилирована с помощью setuptools)?

У меня есть проект C ++, для которого я разрабатываю интерфейс Python. Сейчас я использую pybind11 поскольку он кажется довольно аккуратным и имеет несколько хороших инструментов для сборки модуля расширения с помощью CMake, как и строится основной проект C ++.

Через CMake мне удалось получить общую библиотеку, содержащую функции интерфейса для сборки, однако теперь, когда она у меня есть, я не знаю, как сказать Python, что он существует, и сделать его способным импортировать. Я не хочу перенастраивать всю сборку проекта для запуска через Python (т.е. как описано Вот с setuptools), потому что это большой проект, и я просто предоставляю интерфейс Python для его части. Поэтому было бы предпочтительнее, если бы я мог просто собрать общую библиотеку для Python вместе с остальной частью кода C ++, а затем чуть позже запустить «setup.py install», чтобы сделать все остальное, что нужно, чтобы сделать общую библиотеку видимой. в Python.

Это возможно? Или мне нужно выполнить какой-то другой вид рефакторинга, например, заставить основной проект собрать некоторые другие чистые библиотеки C ++, которые я затем просто добавляю в библиотеку модулей расширения Python, которая создается отдельно через setuptools?

1

Решение

Если вам нужно установить только один двоичный модуль, вы можете создать простой установщик только для этого модуля. Давайте предположим, что у вас есть двоичный модуль foo.so (или же foo.pyd если вы работаете в Windows), которая уже собрана с помощью вашего скрипта сборки, сгенерированного cmake. Затем вы можете создать простой скрипт установки:

from setuptools import setup

setup(
name='foo',
version='0.1.2.3',
py_modules=['foo']
)

Тогда вам нужно добавить MANIFEST.in файл, чтобы выбрать файл вашего двоичного модуля:

include foo.so

Итак, вам нужно 3 файла:

foo.so
MANIFEST.in
setup.py

Теперь вы можете сделать python setup.py install из вашей виртуальной среды Python, и ваш двоичный модуль будет установлен в нем. Если вы хотите распространять свой модуль, то лучше установить Python wheel упаковать и создать .whl файл: python setup.py bdist_wheel, Такое «колесо» может быть позже установлено с pip команда. Обратите внимание, что двоичные модули должны быть установлены на той же платформе и в той версии Python, которая использовалась для сборки этих модулей.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]