pip 安装 tar.gz 时没有名为 'Cython' 的模块
No module named 'Cython' with pip installation of tar.gz
我使用 Poetry 为我的示例包 (https://github.com/iamishalkin/cyrtd) 构建 tar.gz 和 whl 文件,然后尝试在 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 和 poetry,但没有任何帮助。
还尝试了 中的弱相关解决方法 - 仍然没有运气
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\d1bdaecf1cc5234ca4d9e9e49b2f195e7adb83941424116432e
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']
})
在 pyproject.toml
的构建系统部分添加 cython 帮助了我
pyproject.toml
:
...
[build-system]
requires = ["poetry>=0.12", "cython"]
...
我使用 Poetry 为我的示例包 (https://github.com/iamishalkin/cyrtd) 构建 tar.gz 和 whl 文件,然后尝试在 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 和 poetry,但没有任何帮助。
还尝试了
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\d1bdaecf1cc5234ca4d9e9e49b2f195e7adb83941424116432e
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']
})
在 pyproject.toml
的构建系统部分添加 cython 帮助了我
pyproject.toml
:
...
[build-system]
requires = ["poetry>=0.12", "cython"]
...