Какой самый простой способ сделать необязательное расширение C для пакета Python? - PullRequest
14 голосов
/ 30 октября 2010

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

Кажется, я не могу найти никаких простых способов сделать это.

Ответы [ 2 ]

14 голосов
/ 20 апреля 2011

На самом деле для этого можно использовать функцию распространения / настройки, называемую «Возможности».Он явно предназначен для того, чтобы setup.py делал разные вещи на основе параметров командной строки --with-xxx и --without-xxx.

  • Этот пост в блоге дает хорошее введение, я могу 'В настоящее время нет лучшей документации (кроме источника распространения - класс объектов и ключевое слово функций ).
  • setup.py * проекта jinja использует функции для вашей конкретной цели, это может быть хороший шаблон для работы.
  • simplejson setup.py также делает нечто подобное, за исключением того, что он закодирован, чтобы всегда пытаться собратьфункция C-extension, которую он определяет, и изящно прибегает к чистому python при сбое сборки;это также может быть полезно для вашей цели.
3 голосов
/ 30 октября 2010
ext_modules = []
if '--add-this' in sys.argv:
    ext_modules.append(Extension(...))
    sys.argv.remove('--add-this')
setup(...
      ext_modules = ext_modules
)

Это глупо, но может быть проще.Более продвинутым подходом было бы расширить класс Distribution для поддержки флага, скажем --with-modules, а затем настроить ext_modules внутри finalize_options.

...