jdx/mise · error
dependency locking does not support uvx_args or pipx_args
Error message
{} dependency locking does not support uvx_args or pipx_args What it means
validate_lock_options in the pipx lock module rejects replaying/creating a uv dependency lock when uvx_args or pipx_args are configured. Custom uvx/pipx CLI arguments make the dependency resolution non-reproducible through the lock machinery, so the combination is disallowed.
Solutions
- Remove uvx_args/pipx_args from the tool options, then run `mise lock`
- Keep uvx_args/pipx_args but skip dependency locking (install resolves version-only)
- Fold needed flags into supported options where possible
Example fix
// before
[tools]
"pipx:ruff" = { version = "latest", uvx_args = "--python 3.12" }
// after
[tools]
"pipx:ruff" = { version = "latest" } Defensive patterns
Strategy: validation
Validate before calling
if ((opts.uvx_args?.trim() || opts.pipx_args?.trim()) && lockEnabled)
throw new Error("uvx_args/pipx_args are incompatible with dependency locking"); Prevention
- Choose one: either custom uvx_args/pipx_args (no locking) or dependency locking (no custom args)
- When adding args to a locked tool, remove the lock entry or run `mise lock` again after clearing args
When it happens
Trigger: Running `mise lock` or installing from a lock (prepare_install_version, resolve_uv_lock, validate_uv_lock) for a pipx tool whose options set uvx_args or pipx_args with non-empty values while dependency locking is in play.
Common situations: Config carries extra uv CLI flags (e.g. --index-url, --python) passed via uvx_args; user tries to lock a tool that previously used custom args; migration of old config with args into a locked setup.
Related errors
- has a uv dependency graph; use uv with a PyPI package to…
- has no uv dependency graph; run `mise lock
- dependency_prereleases must be disallow, allow…
- expose requires uv@ or newer, but the installed uv version…
- expose requires uv@ or newer, but uv@ is installed
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/28f60732d6a12a5e.
Report an issue: GitHub.
Appendix: source
Thrown at src/backend/pipx/lock.rs:62
&& !PipxOptions::new(&tv.request.options()).uvx_disabled()
&& matches!(
self.tool_name().parse::<PipxRequest>(),
Ok(PipxRequest::Pypi(_))
)
}
pub(super) fn uv_lock_options_supported(&self, tv: &ToolVersion) -> bool {
let raw = tv.request.options();
let opts = PipxOptions::new(&raw);
[opts.uvx_args(), opts.pipx_args()]
.into_iter()
.flatten()
.all(|s| s.trim().is_empty())
}
pub(super) fn validate_lock_options(&self, tv: &ToolVersion) -> Result<()> {
if !self.uv_lock_options_supported(tv) {
bail!(
"{} dependency locking does not support uvx_args or pipx_args",
self.ba.short
);
}
if !self.uv_lock_allowed(tv) {
bail!(
"{} has a uv dependency graph; use uv with a PyPI package to replay it",
self.ba.short
);
}
Ok(())
}
async fn lock_uv_program(&self, config: &Arc<Config>) -> Result<PathBuf> {
let uv = self.spawnable_dependency(config, None, "uv").await
.ok_or_else(|| eyre!("Python dependency locks require uv >= {MIN_UV_VERSION}; install it with `mise use uv`"))?;
let output = CmdLineRunner::new(&uv).arg("--version").read().await?;
let version = outputView on GitHub (pinned to 533346cc37)