conda环境下pip install报Cython缺失但python setup.py install正常
问题核心成因
pip 20.1及以上版本默认启用PEP 517定义的*构建隔离(build isolation)*机制,这是你遇到报错的直接原因:
- 执行
pip install .时,pip不会直接在你当前激活的conda环境中运行setup.py,而是会创建一个全新的临时隔离虚拟环境,在这个独立环境中拉取构建所需的依赖、执行打包脚本,最终再把编译好的包安装回正式环境。 - 你此前安装在当前conda环境下的Cython、setuptools等依赖,都属于正式环境的安装内容,临时隔离环境里没有预装对应依赖,就会抛出找不到Cython的模块错误。
- 直接执行
python setup.py install时,脚本完全运行在当前激活的conda环境进程中,可以正常读取当前路径下安装的Cython组件,因此流程不会出现报错。
可直接落地的解决方法
- 临时关闭构建隔离,直接使用当前环境的已有依赖完成安装:执行命令
pip install . --no-build-isolation - 永久配置项目的构建依赖声明:在项目根目录新建
pyproject.toml文件,写入固定的构建依赖列表,让pip创建临时隔离环境时自动预装Cython、setuptools、wheel等必须组件,文件参考内容:
[build-system] requires = ["setuptools>=42", "Cython", "wheel"] build-backend = "setuptools.build_meta"
- 如果你当前的pip版本没有默认启用PEP 517逻辑,可以强制指定兼容模式执行:
pip install . --use-pep517 --no-build-isolation
前置校验操作
按照你给出的路径信息,已经可以排除pip和Python环境路径错位的问题:两个可执行文件同属/Users/petioptrv/miniconda3/envs/ib-insync-sim-test/路径下,不存在pip指向其他Python解释器的情况。如果后续遇到类似路径不匹配的问题,优先执行pip -V比对pip对应的Python解释器路径和which python输出的路径是否一致即可。
内容的提问来源于stack exchange,提问作者Petio Petrov
相关产品推荐
相关产品推荐

