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

如何用hatch让项目脚本仅随指定可选特性安装?

问题解答

1. 能否将entry point绑定到optional feature安装?

目前Python标准打包规范(PEP 621)不支持直接将[project.scripts]定义的entry point与optional dependency(feature)关联绑定。也就是说,只要你的包被安装,无论是否勾选gui特性,tsdb-demo脚本都会被创建。

2. 推荐解决方案

方案一:运行时依赖检查(最简单,无需拆分)

修改tsdb.scripts.run_streamlit:run函数,在启动时先检查Streamlit是否安装,未安装则给出明确指引:

def run():
    try:
        import streamlit
    except ImportError:
        print("错误:运行Demo需要安装tsdb的gui特性,请执行:")
        print("pip install tsdb[gui]")
        exit(1)
    # 原Streamlit启动逻辑
    streamlit.run(...)

这种方式成本最低,用户误运行脚本时能得到清晰提示,不会出现模糊的依赖报错。

方案二:将Demo拆分为独立包(长期规范方案)

如果Demo功能后续会扩展,或希望完全隔离依赖,建议将其拆分为独立包(比如命名为tsdb-demo),可放在同一个Git仓库(即monorepo结构),用Hatch的多包管理功能维护:

  • 仓库根目录创建两个子目录:tsdb(核心包)和tsdb-demo(Demo包)
  • 为tsdb-demo单独编写pyproject.toml,声明依赖tsdb和streamlit
  • 用hatch build --all可一次性构建两个包,或单独构建某一个

这种方式的优势:

  • 核心包与Demo依赖完全隔离,用户安装核心包时不会被强制引入Streamlit
  • Demo包可独立发布、更新,不影响核心包的版本节奏
  • 同一仓库维护,无需切换仓库,便于代码同步和协作

3. 关于仓库选择

拆分后完全可以放在同一个Git仓库,这是Python社区常见的monorepo实践,Hatch、Poetry等工具都支持多包仓库管理。如果后续Demo与核心包迭代节奏差异极大,再考虑拆分到独立仓库也不迟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:23:13