У меня есть проект C ++, для которого я разрабатываю интерфейс Python. Сейчас я использую pybind11 поскольку он кажется довольно аккуратным и имеет несколько хороших инструментов для сборки модуля расширения с помощью CMake, как и строится основной проект C ++.
Через CMake мне удалось получить общую библиотеку, содержащую функции интерфейса для сборки, однако теперь, когда она у меня есть, я не знаю, как сказать Python, что он существует, и сделать его способным импортировать. Я не хочу перенастраивать всю сборку проекта для запуска через Python (т.е. как описано Вот с setuptools), потому что это большой проект, и я просто предоставляю интерфейс Python для его части. Поэтому было бы предпочтительнее, если бы я мог просто собрать общую библиотеку для Python вместе с остальной частью кода C ++, а затем чуть позже запустить «setup.py install», чтобы сделать все остальное, что нужно, чтобы сделать общую библиотеку видимой. в Python.
Это возможно? Или мне нужно выполнить какой-то другой вид рефакторинга, например, заставить основной проект собрать некоторые другие чистые библиотеки C ++, которые я затем просто добавляю в библиотеку модулей расширения Python, которая создается отдельно через setuptools?
Если вам нужно установить только один двоичный модуль, вы можете создать простой установщик только для этого модуля. Давайте предположим, что у вас есть двоичный модуль 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, которая использовалась для сборки этих модулей.
Других решений пока нет …