Aucun module nommé 'Cython' avec l'installation pip de tar.gz

10

J'utilise Poetry pour créer des fichiers tar.gz et whl pour mon exemple de package ( https://github.com/iamishalkin/cyrtd ), puis j'essaie d'installer le package dans l'environnement pipenv. L'installation de tar.gz échoue et ceci est un morceau de journaux:

$ 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 installé et peut être appelé à partir de l'interpréteur virtuel. Même dans les journaux, il est écrit que les exigences pour le cython sont satisfaites. Ce qui est étrange - tout a bien fonctionné il y a quelques mois. J'ai également essayé le conda venv, mis à niveau le cython et la poésie, rien n'y fait. Vous avez également essayé une solution de contournement faiblement liée de setup_requires avec Cython? - toujours pas de chance

UPD : J'ai trouvé une solution de contournement sale ici: https://luminousmen.com/post/resolve-cython-and-numpy-dependencies

L'idée est d'ajouter

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

avant l'importation Cython.Build

Après cela, je reçois ces journaux:

$ 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

Toujours à la recherche d'une meilleure solution

UPD2: contenu des fichiers principaux: 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
la source
1
le build.pyscript est-il défini comme valeur [tool.poetry].buildou comment le lier?
Arne
1
@Arne oui, bien sûr, il est lié dans un pyproject.tomlfichier. Le repo de la question contient tout le code
Ivan Mishalkin
ah, je n'ai pas vu que vous avez lié votre repo. est-ce une bonne solution pour vous, ou cherchez-vous toujours quelque chose de mieux? Si c'est assez bon, envisagez de le poster comme une réponse autonome.
Arne
@Arne il y a quelque temps, tout a bien fonctionné sans une telle solution de contournement, je suis donc convaincu qu'il existe une meilleure solution. Le problème est que je ne sais pas, ce qui a changé et où chercher un bug
Ivan Mishalkin

Réponses:

0

L'ajout de cython dans la section build-system pyproject.tomlm'a aidé

pyproject.toml:

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