Каков лучший стиль python setup.py для компиляции модуля расширения C во время установки вместо «publi sh time»? - PullRequest
0 голосов
/ 27 января 2020

У меня есть файл m4, который может автоматически генерировать либо чистый python модуль Treap, либо модуль Cython Treap. Это на http://stromberg.dnsalias.org/svn/treap/trunk/m4_treap.m4

На https://stackoverflow.com/questions/59522262/with-setuptools-optional-c-extension-module-error-is-fatal Я спросил о том, как собрать эти два модуля, сделав версию Cython необязательной. Похоже, что (не очень твердый) вывод состоит в том, что ext_modules=[Extension('pyx_treap', ['pyx_treap.c'], optional=True)] не работает, как описано в документации - проблемы компиляции pyx_treap фатальны, а не являются необязательными.

Поэтому я решил, что, вероятно, у меня должно быть два разных подкаталога в моей системе управления исходным кодом, один для чистого python, а другой для cython, с файлом m4 в родительском каталоге. Тогда для чистых python и каталогов cython каждый получает свой собственный setup.py, а для версии cython требуется чистая версия python, а для чистой версии python не требуется версия cython.

В любом случае Я думаю, у меня есть чистый каталог python, работающий с простым:

setup(
    name='treap',
    py_modules=[
        'treap',
        'py_treap',
        'nest',
        ],
    version=version,
    description='Python implementation of treaps',

Но я не уверен, что делать с cython setup.py. Я собираюсь в основном использовать его на Linux, и я не хочу go маршрут linux - это кажется действительно сложным для того, что вы получаете. Я бы предпочел просто скомпилировать. c для общего объекта во время "установки pip". Однако мой текущий файл setup.py хочет загрузить двоичный файл Linux, что преждевременно по сравнению с тем, что я хочу.

Вывод выглядит следующим образом:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Enter your username: dstromberg
Enter your password: 
Uploading distributions to https://test.pypi.org/legacy/
Uploading pyx_treap-2.0-cp36-cp36m-linux_x86_64.whl
100%|##############################################################################################################| 420k/420k [00:01<00:00, 304kB/s]
NOTE: Try --verbose to see response content.
HTTPError: 400 Client Error: Binary wheel 'pyx_treap-2.0-cp36-cp36m-linux_x86_64.whl' has an unsupported platform tag 'linux_x86_64'. for url: https://test.pypi.org/legacy/

И файл setup.py У меня пока есть версия для Cython, которая не делает то, что я хочу:

setup(
    name='pyx_treap',
    ext_modules=[Extension(name='pyx_treap', sources=['pyx_treap.c'])],
    version=version,
    description='Python implementation of treaps',

Я гуглил несколько часов, но не нашел ничего подходящего.

Как я могу заставить мой пакет Cython загрузить. c и скомпилировать его во время установки pip?

Спасибо!

...