Как я могу заставить setuptools определить, что мой пакет зависит от платформы?

Я работаю над улучшением сценария setup.py для пакета с открытым исходным кодом, который поддерживает различные платформы.

В Linux пакет определяет setuptools.Extension для некоторого кода C, который необходимо собрать вместе с кодом Python. Это создает колесо, имя которого указывает на то, что оно совместимо только с определенной версией CPython и определенной ОС и аппаратной архитектурой.

Однако в macOS он вызывает xcodebuild вручную, а затем включает эту структуру в eager_resources. Setuptools не может определить, что результирующее колесо зависит от платформы, поэтому оно дает ему общее имя файла.

Если это возможно, я бы предпочел, чтобы setuptools построил для меня проект Xcode, но если нет, могу ли я как-то сказать, что это зависит от платформы? Я думал, что могу включить пустое расширение, но это кажется хакерским.


person rgov    schedule 27.12.2019    source источник
comment
Вы знакомы с чрезмерным катанием setuptools.command.install ?   -  person gold_cy    schedule 28.12.2019
comment
Я не, нет. Раньше я мало что делал с setuptools, просто взломал этот скрипт, чтобы он работал немного лучше.   -  person rgov    schedule 28.12.2019
comment
stackoverflow.com/   -  person phd    schedule 28.12.2019


Ответы (1)


Это хакерский способ:

# Add a dummy extension so setuptools knows this is platform-specific
try:
    os.mkdir('build')
except:
    pass
open('build/dummy.c', 'w').close()
mod1 = Extension('package._dummy', sources=['build/dummy.c'])
ext_modules.append(mod1)
person rgov    schedule 27.12.2019