Cython сгенерировал файлы c/cpp в поэзии sdist tar.gz для установки без установки cython

Я использую Poetry для сборки tar.gz. и .whl моего пакета. Документация Cython рекомендует распространять файлы c, созданные cython, вместе с файлами pyx. http://docs.cython.org/en/latest/src/userguide/source_files_and_compilation.html#distributing-cython-modules

Что я должен добавить к build.py или pyproject.toml для создания файлов c/cpp, вызвав poetry build и poetry build -f sdist?

Я пробовал это (из Создать package с cython, чтобы пользователи могли установить его без уже установленного cython):

build.py:

from setuptools.command.build_ext import build_ext
from setuptools.command.sdist import sdist as _sdist
...
class sdist(_sdist):
    def run(self):
        # Make sure the compiled Cython files in the distribution are up-to-date
        self.run_command("build_ext")
        _sdist.run(self)

def build(setup_kwargs):
    setup_kwargs.update({
        ...
        'cmdclass': {'sdist': sdist,
                     'build_ext': build_ext}
    })

Не работал для меня.


person Ivan Mishalkin    schedule 27.02.2020    source источник


Ответы (1)


Текущая версия poetry (1.0.5) игнорирует пользовательский build.py при построении sdist, поэтому нет никаких шансов без предварительного изменения poetry. А пока вы можете использовать сторонние проекты, такие как taskipy, чтобы заменить команду poetry build пользовательской один, напр.

# pyproject.toml

...

[tool.poetry.dev-dependencies]
cython = "^0.29.15"
taskipy = "^1.1.3"

[tool.taskipy.tasks]
sdist = "cython fib.pyx && poetry build -f sdist"

...

и выполнить poetry run task sdist вместо poetry build -f sdist.

person hoefling    schedule 29.02.2020
comment
Благодарю. Можно ли как-то запустить build_ext? Я хотел бы собрать двоичные файлы, запустить тесты, а затем удалить их - person Ivan Mishalkin; 02.03.2020
comment
Есть много способов сделать это, от написания пользовательского сценария и его выполнения в тестовой команде taskipy до сборки и очистки непосредственно в тестовом коде — в зависимости от используемой тестовой среды код будет выглядеть по-разному. Если вы хотите последнего, я предлагаю создать отдельный вопрос, в котором вы описываете используемый вами тестовый стек. - person hoefling; 02.03.2020