You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建含指定依赖的Python Wheel并排除冲突子依赖?

解决Python Wheel构建中vtk_osmesa替代pyvista依赖vtk的问题

问题背景

要为搭载OSMesa的无头机器构建Python Wheel,需要在setup.py的install_requires中包含vtk_osmesa和pyvista,但pyvista默认依赖标准vtk包,而vtk_osmesa的库集与标准vtk不同,必须避免安装标准vtk。

可行解决方案

1. 用pip-compile管理依赖(推荐)

这种方式能精准控制依赖,避免冲突:

  • 创建requirements.in文件,写入依赖规则:
    vtk_osmesa>=9.2.0
    pyvista>=0.40.0 --no-deps
    
    --no-deps参数会阻止pip安装pyvista的所有子依赖(包括标准vtk)。
  • 运行pip-compile生成锁定版本的requirements.txt:
    pip-compile requirements.in
    
  • 在setup.py中引用生成的依赖文件:
    from setuptools import setup
    
    with open("requirements.txt") as req_file:
        install_requires = req_file.read().splitlines()
    
    setup(
        # 其他配置项(名称、版本等)
        install_requires=install_requires
    )
    

2. 直接在setup.py中指定依赖(简化版)

如果不需要版本锁定,可直接在install_requires中声明依赖,同时通过额外步骤确保标准vtk不被安装:

from setuptools import setup

setup(
    # 其他配置项
    install_requires=[
        "vtk_osmesa>=9.2.0",
        "pyvista>=0.40.0"
    ]
)

然后在安装Wheel时,需要加上pip参数跳过pyvista的依赖:

pip install your-wheel-file.whl --no-deps vtk_osmesa>=9.2.0 pyvista>=0.40.0

但这种方式依赖用户手动执行额外步骤,不如第一种方案可靠。

3. 预安装依赖后构建Wheel

适合临时构建场景:

  • 先安装vtk_osmesa和不带依赖的pyvista:
    pip install vtk_osmesa>=9.2.0
    pip install pyvista>=0.40.0 --no-deps
    
  • 再执行Wheel构建:
    python setup.py bdist_wheel
    

关键注意点

  • 确认vtk_osmesa版本与pyvista兼容,可参考pyvista官方文档的vtk版本要求,选择对应版本的vtk_osmesa。
  • vtk_osmesa是标准vtk的无头变体,API与标准vtk兼容,pyvista的导入和功能不会受影响。

内容的提问来源于stack exchange,提问作者Woltan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:22:33