Есть ли способ опубликовать мультиплатформенные колеса на PyPI с тем же номером версии? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь развернуть обернутый Cython модуль C ++ в PyPI как колесо. Цель состоит в том, чтобы заставить аппаратные модули I2C работать с Python на любом Raspberry Pi. Пока что я скомпилировал код, и я знаю, что он работает, если я просто скопирую скомпилированный модуль из Pi 3B с Buster в Pi Zero W с Stretch, но когда я разверну колесо на test.pypi.org из Buster и попытаюсь установить его на Stretch Я получаю:

Could not find a version that satisfies the requirement pyiArduinoI2Crelay (from versions: )
No matching distribution found for pyiArduinoI2Crelay

Если я просто переименую колесо с * _armv7l.whl на * _armv6l.whl Модуль загружает и работает на Pi Zero. Но Pi 3B загружает предыдущую версию из PyPI (и я использовал - no-cache-dir и rm -r .cache / pip / )

Если я запускаю sdist и загружаю его, он жалуется на отсутствие установленного Cython после установки модуля, хотя я точно знаю, что он установлен, потому что это те же диски Pi, которые я скомпилировал ранее. (setup_requires и install_requires не работают)

Пока ничего из этого не помогло:

https://www.python.org/dev/peps/pep-0425/#platform-tag https://packaging.python.org/guides/distributing-packages-using-setuptools/#platform-wheels https://wheel.readthedocs.io/en/stable/user_guide.html#building-wheels Подготовка пакета Cython на основе C для публикации на pypi

Вот ссылка на проект:

https://github.com/tremaru/pyiArduinoI2Crelay

Вот setup.py:

from setuptools import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext

def readme():
        with open('README.md') as readme:
                return readme.read()

setup(name='pyiArduinoI2Crelay',
        version='1.6.4.dev8',
        description='iarduino.ru module for Raspberry Pi',
        long_description=readme(),
        classifiers=[
                'Programming Language :: Python :: 3',
        ],
        url='http://github.com/tremaru/pyiArduinoI2Crelay',
        author='iarduino.ru',
        author_email='shop@iarduino.ru',
        license='MIT',
        package=['pyiArduinoI2Crelay'],
        ext_modules = [Extension(
                name="pyiArduinoI2Crelay",
                sources=["pyiArduinoI2Crelay/pyiArduinoI2Crelay.cpp"])],
        include_package_data=True,
        python_requires='>=3',
        setup_requires=['Cython'],
        install_requires=['Cython'],
        cmdclass = {
                "build_ext": build_ext
        }
)

Я хочу иметь возможность опубликовать одну версию модуля для всех малины. Итак, есть ли способ упаковать несколько .so на одно колесо? Или, может быть, какой-то тег manylinux1 для архитектуры arm?

1 Ответ

0 голосов
/ 05 июля 2019

Оказывается, я тупица. После генерации файла cpp мне не понадобилось ничего в Cython. Все, что мне нужно было сделать, это удалить содержимое Cython и удалить cmdclass = { "build_ext": build_ext }. А затем в публикации и сборки как источник распространения не проблема.

...