Żaden moduł o nazwie „Cython” z instalacją pip tar.gz

10

Używam Poezji do tworzenia plików tar.gz i whl dla mojego przykładowego pakietu ( https://github.com/iamishalkin/cyrtd ), a następnie próbuję zainstalować pakiet w środowisku pipenv. Instalacja tar.gz kończy się niepowodzeniem i jest to dziennik:

$ 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 jest zainstalowany i można go wywołać z wirtualnego tłumacza. Nawet w logach jest napisane, że wymagania dotyczące cytonu są spełnione. Co dziwne - wszystko działało dobrze kilka miesięcy temu. Próbowałem także conda venv, ulepszonego cytonu i poezji, nic nie pomogło. Wypróbowałeś również słabo powiązane obejście z setup_requires z Cython? - wciąż nie ma szczęścia

UPD : Znalazłem jakieś brudne obejście tutaj: https://luminousmen.com/post/resolve-cython-and-numpy-dependencies

Chodzi o to, aby dodać

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

przed importem Cython.Build

Następnie otrzymuję te dzienniki:

$ 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

Wciąż szukam lepszego rozwiązania

UPD2: zawartość głównych plików: 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
źródło
1
czy build.pyskrypt jest ustawiony jako wartość w [tool.poetry].build, czy jak go powiązać?
Arne
1
@Arne tak, oczywiście, że jest powiązany w pyproject.tomlpliku. Repo z pytania zawiera cały kod
Ivan Mishalkin
ah, nie widziałem, że połączyłeś swoje repozytorium. czy jest to właściwe rozwiązanie dla Ciebie, czy nadal szukasz czegoś lepszego? Jeśli jest wystarczająco dobry, rozważ opublikowanie go jako samodzielnej odpowiedzi.
Arne
@Arne jakiś czas temu wszystko działało dobrze bez takiego obejścia, więc jestem pewien, że istnieje lepsze rozwiązanie. Problem polega na tym, że nie wiem, co się zmieniło i gdzie szukać błędu
Ivan Mishalkin

Odpowiedzi:

0

Dodanie cytonu w sekcji systemu kompilacji pyproject.tomlpomogło mi

pyproject.toml:

...
[build-system]
requires = ["poetry>=0.12", "cython"]
...
Ivan Mishalkin
źródło