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

如何配置uv以防止未被管理的包被移除并将uv sync --inexact --frozen设为默认行为

如何配置uv以防止未被管理的包被移除并将uv sync --inexact --frozen设为默认行为

嘿,我刚好也遇到过类似的困扰——uv 默认的 sync 操作确实会清理掉未在 pyproject.toml 里声明的包,尤其是子项目场景下,很容易误删父项目安装的依赖,每次手动加参数又太麻烦。不过咱们有两种实用的方法来解决这个问题,把 uv sync --inexact --frozen 设成默认行为,同时保住那些未被管理的包:

方法一:通过 uv 配置文件全局/项目级生效

uv 支持用配置文件设置命令的默认参数,步骤很简单:

  • 如果你想让这个配置只在当前项目生效,就在项目根目录创建 .uv.toml 文件;如果想全局所有项目都生效,就把文件放在用户主目录下(比如 ~/.uv.toml)。
  • 在文件里添加以下内容:
[commands.sync]
default_args = ["--inexact", "--frozen"]

之后你每次运行 uv sync,都会自动带上这两个参数,完全等同于执行 uv sync --inexact --frozen。

方法二:用 Shell 别名/函数替换默认命令

如果你不想修改配置文件,也可以给 Shell 设置别名或者函数:

  • 简单别名方式(适合快速使用):打开你的 Shell 配置文件(比如 Bash 的 ~/.bashrc,Zsh 的 ~/.zshrc),添加一行:
alias uv-sync='uv sync --inexact --frozen'

之后运行 uv-sync 就相当于执行带参数的命令。

  • 进阶函数方式(彻底替换 uv sync 命令):如果想让输入 uv sync 就自动触发带参数的操作,可以用 Shell 函数:
uv() {
  if [[ "$1" == "sync" ]]; then
    command uv sync --inexact --frozen "${@:2}"
  else
    command uv "$@"
  fi
}

这个函数会判断你输入的 uv 命令是不是 sync,如果是就自动加上参数,其他 uv 命令则正常执行原生命令。

补充说明这两个参数的作用

  • --frozen:让 uv 严格遵循已有的 uv.lock 文件,不会更新依赖版本,也不会移除 lock 文件中记录的任何包——这正是防止未被管理的包被删除的关键;
  • --inexact:允许 uv 使用 lock 文件里记录的具体版本,而不是强制匹配 pyproject.toml 里的版本约束,避免因为版本不匹配而误删已安装的包。

就拿你举的例子来说,父项目依赖 abc,当你在子项目里运行配置后的 uv sync 时,uv 会参考 lock 文件保留 abc,不会因为子项目的 pyproject.toml 里没声明它就把它删掉。

备注:内容来源于stack exchange,提问作者Ge-CDU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:43:08