Как создать make.итак, файлы из кода, написанного на C или C ++, которые можно использовать на Python

StackOverflow https://stackoverflow.com/questions/2610421

Вопрос

Просматривая модули Python и код в каталоге "lib-dnyload" в Python framework, я заметил, что всякий раз, когда код создает какой-либо графический интерфейс, он импортирует файл, отличный от Python, с расширением .so.И в "lib-dnyload" есть тонны файлов .so.

Погуглив, я обнаружил, что эти файлы называются общими объектами и написаны на C или C ++.У меня есть Mac, и я использую GCC.Как мне создать общие объектные файлы, доступные через Python?В основном просто о том, как создавать общие объекты с помощью GCC, используя Mac OS X.

Это было полезно?

Решение

На мой взгляд, самый простой способ - это использовать Китон.Cython сгенерирует для вас некоторый код на C, скомпилирует его, чтобы создать библиотеку ".so", которую вы сможете загрузить из python.Это легко и безболезненно.Я предлагаю вам следовать руководству, и довольно скоро у вас должна появиться библиотека so.

Если вы хотите узнать все подробности, лежащие в основе расширений python на языке Си, вам следует погрузиться в Документация Python о расширениях C.

Другие советы

Официальная документация Python Начинается с простого примера. Это достаточно хорошо для начала.

Стандартный способ создания и установки модулей расширения C с Python - использовать функции Дибулировать который включен в стандартную библиотеку Python. Как правило, это означает включение файла C в вашем каталоге проекта и создание файла конфигурации, обычно называемого setup.py, чтобы определить исходные файлы C. Запустив правильно настроенный setup.py Файл под Python, Distutils Будет позаботиться о компиляции и соединении исходных файлов C, используя компилятор C Compler и Linker. (На OS X вам нужно будет установить бесплатный Apple Xcode Инструменты разработчика, которые устанавливают версии gcc,) Распадается через все документацию Distutils, чтобы выяснить, что делать, может быть подавляющим прямо сейчас. Вот Простое руководство Это должно быть достаточно, чтобы вы начали.

Зачем использовать дибулирование setup.py а не просто звонить в GCC? Некоторые причины:

  1. Поскольку расширения C обычно проходят в контексте самого интерпретатора Python, важно, чтобы расширения были скомпилированы и связаны в способе, совместимом с CD Code в интерпретатере. INTUTILS пытается сделать догадки из этого, поставляя правильные варианты для Python, в котором вы выполняете. Это может быть особенно важно на OS X, где Pythons приходят в различных ароматах, включая некоторые с различными комбинациями исполняемых файлов Multi-архитектуры (т.е. -arch i386, -arch ppc, -arch x86_64, -arch ppc64) И при поддержке нескольких версий OS X (т.е. нынешние установщики Python.org OS X совместимы с os x 10,4-10,6).

  2. DISTUTILS позволяет вам упаковать и распространять комбинации чистых модулей расширений Python и C в машине и операционной системе независимым способом. Во многих случаях, если код C записывается, чтобы избежать зависимых систем операционной системы, и тому подобное, ваши расширения C могут быть построены и установлены на большинстве текущих платформ Python без модификации и без необходимости знать, какие Compiler использовать или варианты задавать.

  3. Вы обнаружите, что почти все современные пакеты сторонних пакетов Python с C-кодом Cod работают так, чтобы привыкнуть к этой привычке использовать Distutils для этого с самого начала.

  4. Как вы увидите в руководстве, это очень легко настроить setup.py Файл для многих случаев.

Вы можете написать расширения Python во многих отношениях, включая Cython, Swig, Boost.python ... Вы также можете написать общую библиотеку и использовать библиотеку «CTYPES» для доступа к ней.

Есть разные способы сделать это:

  • Использовать Python.h Заголовок в вашем C код. Это производит самый быстрый код.
  • Используйте обертки вокруг заголовков Python, как Усадьба. Отказ Код может быть немного медленнее, но вам не нужно или минимальное изменение исходного кода C / C ++. В большинстве случаев вам просто надо Написать файлы интерфейса SWIG И общие объекты интегрированы с Python / PHP / Java и т. Д. Это самый простой способ начать wrapp ваш код C / C ++.
  • Если вы более знакомы с языком Python и хотите избегать написания файлов интерфейса SWIG в стиле C / C ++, чем Cython Лучшая обертка для вас.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top