Каков самый простой способ сделать дополнительное расширение C для пакета python?
Я создал расширение C, которое я хотел бы включить в своем пакете Python (с помощью setuptools), только если передана опция командной строки. Каким будет самый простой способ сделать это?
Кажется, я не вижу простых способов обойти это.
Ответы
Ответ 1
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.
Ответ 2
На самом деле существует функция distribute/setuptools, называемая "Features", которая может быть использована для этого.
Он явно разработан, чтобы setup.py выполнял разные действия на основе параметров командной строки --with-xxx
и --without-xxx
.
- Этот пост в блоге дает хорошее введение, я не могу найти лучшую документацию в это время (кроме источника Distribute - класс Feature и ключевые слова функций).
- Проект jinja setup.py использует функции для вашей конкретной цели, это может быть хороший шаблон для работы.
- Simplejson setup.py также делает что-то подобное, за исключением того, что он закодирован, чтобы всегда пытаться создать функцию C-расширения, которую он определяет, и изящно отступают к чистому питону, когда здание терпит неудачу; это также может быть полезно для вашей цели.