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

在pyproject.toml中执行安装时下载二进制文件的正确方式

在pyproject.toml中实现安装时下载二进制文件的方案

当然可以实现,不过pyproject.toml本身是声明式配置文件,不支持直接编写代码逻辑,需要借助构建后端的扩展机制来完成,具体操作方式如下:

核心思路

通过指定构建后端(比如setuptools),结合传统的setup.py文件编写下载逻辑——这是目前处理这类需要编程能力的安装步骤最成熟的方案。

具体操作步骤

  1. 在pyproject.toml中声明构建后端
    确保你的pyproject.toml指定setuptools作为构建后端,示例配置:

    [build-system]
    requires = ["setuptools>=61.0", "wheel"]
    build-backend = "setuptools.build_meta"
    
  2. 编写setup.py处理下载逻辑
    在项目根目录保留setup.py文件,在其中编写下载二进制文件的代码,比如在setup()函数执行前完成下载:

    import os
    import urllib.request
    from setuptools import setup
    
    # 下载二进制文件的逻辑
    def download_binaries():
        target_dir = os.path.join(os.path.dirname(__file__), "your_package", "bin")
        os.makedirs(target_dir, exist_ok=True)
        binary_url = "https://example.com/path/to/your/binary"
        target_path = os.path.join(target_dir, "binary_file")
        if not os.path.exists(target_path):
            urllib.request.urlretrieve(binary_url, target_path)
    
    # 先执行下载
    download_binaries()
    
    # 正常执行setup配置
    setup(
        packages=["your_package"],
        package_data={"your_package": ["bin/*"]},
        # 其余元数据可在pyproject.toml中声明
    )
    
  3. 确保下载的文件被打包
    在pyproject.toml中配置package_data,确保下载的二进制文件被包含在分发包中:

    [tool.setuptools.package-data]
    your_package = ["bin/*"]
    

其他可选方案

如果不想保留setup.py,也可以利用setuptools的动态配置钩子或自定义构建后端,但这类方案复杂度更高,适合进阶需求场景。比如通过setuptools的dynamic字段结合自定义脚本触发代码执行,但本质还是需要在构建流程中引入编程逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:55:38