Python + setuptools: распространение предварительно скомпилированной разделяемой библиотеки с привязками boost.python

У меня есть библиотека C ++ (в дальнейшем мы будем называть ее примером), для которой я написал привязки Python с использованием библиотеки boost.python. Эта библиотека в Python будет называться pyExample. Весь проект построен с использованием CMake, и получившаяся Python-упакованная библиотека представляет собой файл с именем libpyExample.so,

Когда я использую привязки Python из скрипта Python, расположенного в том же каталоге, что и libpyExample.soЯ просто должен написать:

import libpyExample
libpyExample.hello_world()

и это выполняет hello_world() функция, предоставляемая процессом упаковки.

Для удобства я бы хотел, чтобы моя библиотека pyExample была доступна из любого места, просто используя команду

import pyExample

Я также хочу, чтобы pyExample легко устанавливался в любом virtualenv всего за одну команду. Поэтому я подумал, что для этого будет удобнее использовать setuptools. Следовательно, это будет означать:

  • Изготовление libpyExample.so видимый для любого скрипта Python
  • Изменение имени, под которым осуществляется доступ к модулю

Я нашел много вещей о компиляции расширений C ++ с помощью setuptools, но ничего о упаковке предварительно скомпилированных расширений C ++. Возможно ли то, что я хочу сделать?

Я не хочу собирать библиотеку pyExample с помощью setuptools, я бы не хотел слишком сильно изменять существующий проект. Сборка CMake просто отлично, я могу получить libpyExample.so подать очень легко.

4

Решение

Если я правильно понимаю ваш вопрос, у вас следующая ситуация:

  • у вас есть существующая сборка на основе CMake библиотеки C ++ с привязками Python
  • Вы хотите упаковать эту библиотеку с помощью setuptools

Последний затем позволяет позвонить python setup.py install --user, который устанавливает lib в site-packages каталог и делает его доступным из любого пути в вашей системе.

То, что вы хотите, возможно, если вы перегружаете классы, которые использует setuptools для сборки расширений, так что эти классы фактически вызывают вашу систему сборки CMake. Это не тривиально, но вы можете найти рабочий пример здесь, предоставленный проектом pybind11:

https://github.com/pybind/cmake_example

Заглянуть в setup.py, вы увидите, как классы build_ext а также Extension наследуются и модифицируются для выполнения сборки CMake.

Это должно работать из коробки для вас или с небольшими изменениями — если ваша сборка требует специального -D флаги, которые будут установлены.
Надеюсь, это поможет!

1

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

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

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