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

如何在setup.py中配置让pip安装依赖时自动对protobuf使用--no-binary参数

首先明确pip的设计限制:install_requires仅支持声明依赖的包名和版本约束,无法直接传递pip安装参数;且预编译的.whl包元数据中没有存储pip安装参数的位置,无法在用户安装whl时自动触发带--no-binary参数的protobuf安装。以下是不同场景下的可行方案:

场景1:分发源码包(.tar.gz格式,可实现自动安装符合要求的protobuf)

方案A:使用现代pyproject.toml配置(适配pip 21.3及以上版本)

在项目根目录的pyproject.toml中添加如下配置即可:

# 声明依赖
[project]
dependencies = [
  "protobuf>=你需要的最低版本号"
]

# 配置pip安装参数
[tool.pip]
no-binary = ["protobuf"]

用户直接执行pip install 你的源码包.tar.gz时,会自动遵循配置从源码编译安装protobuf。

方案B:自定义setup.py的安装命令(兼容传统setuptools打包方式)

修改你的setup.py,重写默认的install安装逻辑:

from setuptools import setup
from setuptools.command.install import install
import subprocess
import sys

class CustomInstall(install):
    def run(self):
        # 优先执行带参数的protobuf安装
        subprocess.check_call([
            sys.executable, "-m", "pip", "install",
            "protobuf", "--no-binary=protobuf"
        ])
        # 执行剩余常规安装流程
        super().run()

setup(
    name="你的包名",
    version="你的版本号",
    install_requires=[
        "protobuf>=你需要的最低版本号"
    ],
    cmdclass={
        "install": CustomInstall
    },
    # 其余你的原有setup配置
)

场景2:必须分发whl包的替代方案

如果只能提供whl包给用户,可以选择以下两种方式实现需求:

  • 提前告知用户安装时添加对应参数,执行命令如下:
    pip install 你的包.whl --no-binary=protobuf
    
  • 告知用户安装前先设置pip环境变量,后续安装会自动生效:
    # Linux/macOS
    export PIP_NO_BINARY=protobuf
    # Windows cmd
    set PIP_NO_BINARY=protobuf
    
    pip install 你的包.whl
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:48:02