Я написал модуль Python, который зависит от некоторых расширений C. Эти расширения C, в свою очередь, зависят от нескольких скомпилированных библиотек C. Я хотел бы иметь возможность распространять этот модуль в комплекте со всеми зависимостями.
Я собрал минимальный пример (он может быть найден на GitHub полностью).
Структура каталогов:
$ tree .
.
├── README.md
├── poc
│ ├── __init__.py
│ ├── cython_extensions
│ │ ├── __init__.py
│ │ ├── cvRoberts_dns.c
│ │ ├── cvRoberts_dns.h
│ │ ├── helloworld.c
│ │ ├── helloworld.pxd
│ │ ├── helloworld.pyx
│ │ ├── test.c
│ │ └── test.h
│ ├── do_stuff.c
│ └── do_stuff.pyx
└── setup.py
setup.py строит расширения и связывает с необходимыми библиотеками (libsundials_cvode
, libsundials_nvectorserial
в этом случае):
from setuptools import setup, find_packages
from setuptools.extension import Extension
from Cython.Build import cythonize
ext_module_dostuff = Extension(
'poc.do_stuff',
['poc/do_stuff.pyx'],
)
ext_module_helloworld = Extension(
'poc.cython_extensions.helloworld',
['poc/cython_extensions/helloworld.pyx', 'poc/cython_extensions/test.c', 'poc/cython_extensions/cvRoberts_dns.c'],
include_dirs = ['/usr/local/include'],
libraries = ['m', 'sundials_cvodes', 'sundials_nvecserial'],
library_dirs = ['/usr/local/lib'],
)
cython_ext_modules = [
ext_module_dostuff,
ext_module_helloworld
]
setup (
name = "poc",
ext_modules = cythonize(cython_ext_modules),
packages=['poc', 'poc.cython_extensions'],
)
Это все хорошо и хорошо, но для этого требуется, чтобы конечный пользователь впервые установил солнечные часы (и, в данном случае, несколько других библиотек, которые чрезвычайно полезны для запуска и запуска).
В идеале я хотел бы настроить это только на машинах разработки, создать дистрибутив, который включает соответствующие общие библиотеки, и отправить какой-то пакет.
Учитывая различные учебники, примеры и сообщения SO, которые я нашел до сих пор. Мне повезло, что я на правильном пути. Однако есть какой-то заключительный шаг, который я просто не собираюсь.
Любая помощь приветствуется: -).