ไม่มีโมดูลชื่อ 'Cython' ที่มีการติดตั้ง pip ของ tar.gz


10

ฉันใช้บทกวีเพื่อสร้างไฟล์ tar.gz และ whl สำหรับแพ็คเกจตัวอย่างของฉัน ( https://github.com/iamishalkin/cyrtd ) จากนั้นลองติดตั้งแพคเกจภายในสภาพแวดล้อม pipenv การติดตั้ง tar.gz ล้มเหลวและนี่เป็นบันทึกชิ้นส่วน:

$ 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 ถูกติดตั้งและสามารถเรียกได้จากล่ามเสมือน แม้ในบันทึกจะถูกเขียนขึ้นข้อกำหนดสำหรับ cython นั้นเป็นที่พอใจ มีอะไรแปลก - ทุกอย่างทำงานได้ดีเมื่อสองสามเดือนก่อน ฉันยังลอง conda venv อัพเกรด cython และกวีนิพนธ์ไม่มีส่วนช่วยอะไร ยังพยายามแก้ไขปัญหาที่เกี่ยวข้องเล็กน้อยจากsetup_requires ด้วย Cython หรือไม่ - ยังไม่มีโชค

UPD : ฉันพบวิธีแก้ไขบางอย่างสกปรกที่นี่: https://luminousmen.com/post/resolve-cython-and-numpy-dependencies

ความคิดคือการเพิ่ม

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

ก่อน Cython.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) ... 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

ยังคงมองหาทางออกที่ดีกว่า

UPD2: เนื้อหาไฟล์หลัก: 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']
    })

1
มีการbuild.pyตั้งค่าสคริปต์เป็นค่า[tool.poetry].buildหรือคุณผูกมันได้อย่างไร
Arne

1
@ Arne ใช่แน่นอนมันถูกผูกไว้ในpyproject.tomlไฟล์ รายการซื้อคืนจากคำถามมีรหัสทั้งหมด
Ivan Mishalkin

อาฉันไม่เห็นว่าคุณเชื่อมโยง repo ของคุณ นี่เป็นทางออกที่เหมาะสมสำหรับคุณหรือคุณยังคงมองหาสิ่งที่ดีกว่าอยู่ใช่ไหม หากดีพอให้ลองโพสต์เป็นคำตอบที่มีในตัวเอง
Arne

@ เมื่อสักครู่ที่ผ่านมาทุกอย่างทำงานได้ดีโดยไม่มีวิธีแก้ปัญหาดังกล่าวดังนั้นฉันมั่นใจว่ามีทางออกที่ดีกว่า ปัญหาคือฉันไม่ทราบว่ามีอะไรเปลี่ยนแปลงและสถานที่ที่จะค้นหาข้อผิดพลาด
Ivan Mishalkin

คำตอบ:


0

การเพิ่ม cython ในส่วน build-system ที่pyproject.tomlช่วยฉัน

pyproject.toml:

...
[build-system]
requires = ["poetry>=0.12", "cython"]
...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.