Ningún módulo llamado 'Cython' con instalación pip de tar.gz

10

Utilizo Poetry para compilar archivos tar.gz y whl para mi paquete de ejemplo ( https://github.com/iamishalkin/cyrtd ) y luego intento instalar el paquete dentro del entorno pipenv. la instalación de tar.gz falla y este es un registro:

$ poetry build
...
$ pip install dist/cyrtd-0.1.0.tar.gz
Processing c:\work2\cyrtd\dist\cyrtd-0.1.0.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: cython<0.30.0,>=0.29.13 in c:\users\ivan.mishalkin\.virtualenvs\cyrtd-tpdvsw8x\lib\site-packages (from cyrtd==0.1.0) (0.29.15)
Building wheels for collected packages: cyrtd
  Building wheel for cyrtd (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
...
from Cython.Build import cythonize
  ModuleNotFoundError: No module named 'Cython'  
  ----------------------------------------
  ERROR: Failed building wheel for dxpyfeed
Failed to build dxpyfeed
ERROR: Could not build wheels for dxpyfeed which use PEP 517 and cannot be installed directly

Cython está instalado y se puede llamar desde un intérprete virtual. Incluso en los registros está escrito que se cumplen los requisitos para cython. Lo que es extraño: todo funcionó bien hace un par de meses. También probé conda venv, cython actualizado y poesía, nada me ayudó. ¿También probó una solución débilmente relacionada de setup_requires con Cython? - todavía no hay suerte

UPD : encontré algunas soluciones sucias aquí: https://luminousmen.com/post/resolve-cython-and-numpy-dependencies

La idea es agregar

from setuptools import dist
dist.Distribution().fetch_build_eggs(['cython'])

antes de la importación de Cython.Build

Después de esto obtengo estos registros:

$ pip install dist/cyrtd-0.1.0.tar.gz
Processing c:\work2\cyrtd\dist\cyrtd-0.1.0.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: cython<0.30.0,>=0.29.13 in c:\users\ivan.mishalkin\.virtualenvs\cyrtd-tpdvsw8x\lib\site-packages (from cyrtd==0.1.0) (0.29.15)
Building wheels for collected packages: cyrtd
  Building wheel for cyrtd (PEP 517) ... done
  Created wheel for cyrtd: filename=cyrtd-0.1.0-cp37-cp37m-win_amd64.whl size=33062 sha256=370a90657759d3183f3c11ebbdf1d23c3ca857d41dd45a86386ba33a6baf9a07
  Stored in directory: c:\users\ivan.mishalkin\appdata\local\pip\cache\wheels\45\d1\6b\52daecf1cc5234ca4d9e9e49b2f195e7adb83941424116432e
Successfully built cyrtd
Installing collected packages: cyrtd
  Attempting uninstall: cyrtd
    Found existing installation: cyrtd 0.1.0
    Uninstalling cyrtd-0.1.0:
      Successfully uninstalled cyrtd-0.1.0
Successfully installed cyrtd-0.1.0

Sigo buscando una mejor solución

UPD2: contenido de los archivos principales: build.py:

from setuptools import Extension
from Cython.Build import cythonize

cyfuncs_ext = Extension(name='cyrtd.cymod.cyfuncs',
                        sources=['cyrtd/cymod/cyfuncs.pyx']
                        )

EXTENSIONS = [
    cyfuncs_ext
]

def build(setup_kwargs):
    setup_kwargs.update({
        'ext_modules': cythonize(EXTENSIONS, language_level=3),
        'zip_safe': False,
        'setup_requires':['setuptools>=18.0', 'cython']
    })
Ivan Mishalkin
fuente
1
¿Se establece el build.pyscript como el valor [tool.poetry].buildo cómo se vincula?
Arne
1
@Arne sí, por supuesto, está enlazado en el pyproject.tomlarchivo. El repositorio de la pregunta contiene todo el código
Ivan Mishalkin
Ah, no vi que vinculaste tu repositorio. ¿Es esta una solución adecuada para ti o todavía estás buscando algo mejor? Si es lo suficientemente bueno, considere publicarlo como una respuesta independiente.
Arne
@ Hace un tiempo, todo funcionó bien sin esa solución, por lo que estoy seguro de que hay una mejor solución. El problema es que no sé, qué ha cambiado y dónde buscar errores
Ivan Mishalkin

Respuestas:

0

Agregar cython en la sección del sistema de construcción pyproject.tomlme ayudó

pyproject.toml:

...
[build-system]
requires = ["poetry>=0.12", "cython"]
...
Ivan Mishalkin
fuente