Releases: manzt/juv
v0.4.2
v0.4.1
Bug fixes
- Manually clean up temp file in
juv run
on Windows (#87)
Contributors
Full Changelog: v0.4.0...v0.4.1
v0.4.0
Release Notes
This release is considered breaking since it sets a minimum bound on uv
dependency to v0.6.7 or later. This could potentially affect environments where both juv
and uv
are Python dependencies, and there is an upper bound on the uv
version (unlikely).
There are no intentional breaking changes to juv
commands.
Enhancements
- Add explicit
juv sync
command (#84)
Breaking changes
- Replace
juv venv
internals withuv sync --script
(#84)
Contributors
v0.3.4
What's Changed
Full Changelog: v0.3.3...v0.3.4
v0.3.3
Enhancements
- Extend
juv venv
to regular python scripts (#82)
Allows for passing a script with inline script metadata to juv venv
.
uv init --script foo.py
uv add --script foo.py attrs
juv venv --from foo.py
# Using CPython 3.13.0
# Creating virtual environment at: .venv
# Activate with: source .venv/bin/activate
# Using Python 3.13.0 environment at: .venv
# Resolved 1 package in 0.62ms
# Installed 1 package in 1ms
# + attrs==25.1.0
Useful for quickly creating a .venv
for a standalone script, which can be used by other tools like text editors or IDEs.
Contributors
v0.3.2
Enhancements
- Add
juv venv
to support exporting explicit notebook environments (#80)
Some editors and environments are missing the benefits of standalone notebooks because juv manages virtual environments transparently within juv run
. To improve compatibility with other tools (e.g., editors & IDEs), this release adds juv venv
to export a virtual environment with all a notebook's specified dependencies (and ipykernel
):
juv venv --from=Untitled.ipynb
# Using CPython 3.13.0
# Creating virtual environment at: .venv
# Activate with: source .venv/bin/activate
The resulting environment (i.e., .venv
) can be selected in an editor like VS Code to run the notebook.
To create a virtual environment with only the locked dependencies (i.e., without ipykernel
), use the --no-kernel
flag:
juv venv --from=Untitled.ipynb --no-kernel
Contributors
v0.3.1
What's Changed
Full Changelog: v0.3.0...v0.3.1
v0.3.0
Release Notes
This release adds support for generating lockfiles from Jupyter notebooks using inline metadata, as defined in PEP 723. It is based on uv's recent support for locking standalone scripts, except instead of writing a separate lockfile, juv
embeds (and updates) a lockfile in the Jupyter notebook metadata.
By default, notebooks remain unlocked. To lock a notebook, run juv lock /path/to/notebook.ipynb
, which generates and embeds a lockfile in the notebook's metadata under the "uv.lock"
key. The lockfile is respected and updated automatically when using juv run
, uv add
, or uv remove
.
Additional commands:
juv export
: Outputs an alternative lockfile format (requirements.txt
style) to stdout.uv tree
: Displays the dependency tree for a script.
Both commands work with notebooks, whether locked or unlocked.
This release is considered breaking due to the lockfile support, which requires a minimum uv
0.5.18 and modifies execution.
Breaking changes
Enhancements
- Add
--clear
flag tolock
to clear lockfile metadata (#69) - Add
export
command (#70) - Add
lock
command (#64) - Add
tree
command (#68) - Sync lockfile during
add
command (#65) - Sync lockfile during
remove
command (#66)
Bug fixes
- Require at least one package for
add
andremove
(#73) - Support relative paths in the
run
command (#72)
Contributors
v0.2.28
Other changes
- Add
remove
command (#59)
Contributors
Notes
This release adds juv remove
to remove packages from a notebook or script. Dependencies are removed from the PEP-723 inline metadata. The command follows uv's semantics. See the uv docs for more information.
uvx juv init
uvx juv add Untitled.ipynb 'numpy>=1.0.0' 'polars' # adds 'numpy>=1.0.0' 'polars'
uvx juv remove Untitled.ipynb numpy # removes 'numpy>=1.0.0'