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

使用UV打包项目时如何正确包含Jinja2模板文件

使用UV打包项目时如何正确包含Jinja2模板文件

嗨,我来帮你搞定这个UV打包时包含Jinja2模板的问题~你现在把模板嵌在py文件字符串里的 workaround 虽然能用,但模板复杂后维护起来肯定头疼,下面是更规范、省心的解决方案:

问题根源

你的j2模板目录虽然在包结构里,但UV(底层兼容setuptools打包逻辑)默认不会自动把非.py的资源文件包含进发布包,导致打包后代码找不到模板文件,才需要用字符串硬编码的方式绕路。

第一步:修改pyproject.toml,配置打包时包含模板文件

在你的pyproject.toml里新增package-data配置,告诉打包工具把mypackage下j2目录的所有文件都纳入打包范围。修改后的完整配置如下:

[project]
name = "dojipipeline"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "groq>=0.16.0",
    "jinja2>=3.1.5",
    "pydantic>=2.10.6",
    "python-dotenv>=1.0.1",
    "pyyaml>=6.0.2",
]

# 新增:指定要包含的包内资源文件
[tool.setuptools.package-data]
"mypackage" = ["j2/**/*"]

这个配置的意思是:给mypackage包递归包含j2目录下的所有层级文件。

第二步:在代码里正确加载Jinja2模板

不用再把模板写在字符串里了,直接用Jinja2的PackageLoader加载包内的模板文件,示例代码如下:

from jinja2 import Environment, PackageLoader

# 初始化Jinja2环境,指定包名和模板所在的子目录
env = Environment(loader=PackageLoader("mypackage", "j2"))

# 加载具体的模板文件(比如你的模板叫generate_data_model.j2,放在j2目录下)
template = env.get_template("generate_data_model.j2")

# 渲染模板,传入需要的变量
rendered_content = template.render(
    tasks=tasks_list,
    contexts=contexts_list,
    data_shema=data_shema_obj
)

第三步:验证打包结果

运行uv build生成包后,你可以解压生成的.whl文件,检查mypackage/j2/目录下的模板文件是否被正确包含进去,确认没问题后就可以正常使用了。

这种方式下,模板文件可以单独维护,编辑器的语法高亮、格式检查功能都能正常用,代码也会整洁很多~

备注:内容来源于stack exchange,提问作者Rembau Times

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:48:08