Kein Modul namens 'Cython' mit Pip-Installation von tar.gz.

10

Ich verwende Poetry, um tar.gz- und whl-Dateien für mein Beispielpaket ( https://github.com/iamishalkin/cyrtd ) zu erstellen, und versuche dann, das Paket in der pipenv-Umgebung zu installieren. Die Installation von tar.gz schlägt fehl und dies ist ein Teil der Protokolle:

$ 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 ist installiert und kann vom virtuellen Interpreter aufgerufen werden. Auch in Protokollen steht geschrieben, dass die Anforderungen an Cython erfüllt sind. Was seltsam ist - vor ein paar Monaten hat alles gut funktioniert. Ich habe auch Conda Venv ausprobiert, Cython und Poesie verbessert, nichts hat geholfen. Auch versucht, schwach verwandte Problemumgehung von setup_requires mit Cython? - Immer noch kein Glück

UPD : Ich habe hier eine schmutzige Problemumgehung gefunden: https://luminousmen.com/post/resolve-cython-and-numpy-dependencies

Die Idee ist hinzuzufügen

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

vor Cython.Build Import

Danach bekomme ich folgende Protokolle:

$ 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

Immer noch auf der Suche nach einer besseren Lösung

UPD2: Hauptdateien Inhalt: 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
quelle
1
Ist das build.pySkript als Wert festgelegt [tool.poetry].buildoder wie binden Sie es?
Arne
1
@Arne ja, natürlich ist es in pyproject.tomlDatei gebunden . Das Repo von Frage enthält den gesamten Code
Ivan Mishalkin
Ah, ich habe nicht gesehen, dass du dein Repo verlinkt hast. Ist das eine richtige Lösung für Sie oder suchen Sie noch etwas Besseres? Wenn es gut genug ist, sollten Sie es als eigenständige Antwort veröffentlichen.
Arne
@Arne vor einiger Zeit hat alles ohne eine solche Problemumgehung gut funktioniert, daher bin ich zuversichtlich, dass es eine bessere Lösung gibt. Das Problem ist, dass ich nicht weiß, was sich geändert hat und wo ich nach Fehlern suchen soll
Ivan Mishalkin

Antworten:

0

Das Hinzufügen von Cython im Build-System-Bereich in pyproject.tomlhat mir geholfen

pyproject.toml::

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