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

Poetry构建时能否将指定内部依赖打包进Wheel?

问题描述

我们有一个内部库,项目的pyproject.toml配置如下:

[tool.poetry]
...
packages = [{ include = "my_package" }]

[[tool.poetry.source]]
url = "https://pypi.fury.io/<OUR_REPO>/"
name = "fury"
secondary = true

[tool.poetry.dependencies]
python = "^3.8.10"
some-internal-lib = "^1"
...

执行poetry build命令时,some-internal-lib未被包含在生成的Wheel中。由于目标运行环境无法访问内部仓库,我们需要将该依赖打包进Wheel,实现类似Java/Scala的uber jar效果,请问有可行方式?

可行解决方案

方案1:使用poetry-plugin-bundle插件(推荐)

这个官方插件专门支持构建包含依赖的"胖包":

  1. 安装插件:
    poetry self add poetry-plugin-bundle
    
  2. 执行打包命令,直接生成包含所有依赖的wheel:
    poetry bundle wheel --output dist/my_package-fat-0.1.0.wheel
    
    生成的包会把some-internal-lib等依赖直接嵌入,目标环境无需额外拉取依赖。

方案2:手动嵌入依赖

如果不想用插件,可通过手动复制的方式实现:

  1. 执行poetry install安装所有依赖到本地虚拟环境,找到some-internal-lib的安装目录(一般在venv/lib/python3.8/site-packages/some_internal_lib)
  2. 将整个some_internal_lib目录复制到项目根目录(与my_package同级)
  3. 修改pyproject.toml的packages配置,把嵌入的依赖加入:
    [tool.poetry]
    packages = [
        { include = "my_package" },
        { include = "some_internal_lib" }
    ]
    
  4. 删除[tool.poetry.dependencies]中的some-internal-lib条目,避免构建时冲突
  5. 执行poetry build,生成的wheel会包含项目代码和内部依赖

方案3:手动构建胖Wheel(临时场景适用)

  1. 先执行poetry build生成普通的wheel和源码包
  2. 安装必要工具:
    pip install wheel pip
    
  3. 创建临时目录,解压源码包并安装所有依赖到指定目录:
    mkdir temp_build && cd temp_build
    tar xzf ../dist/my_package-0.1.0.tar.gz
    cd my_package-0.1.0
    pip install . --target ../lib
    
  4. 将lib目录下的所有内容打包成新的wheel(可自行修改包名标识为胖包版本)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:02:23