57 Commits

Author SHA1 Message Date
konsti
af06a6fe0a Use more universal windows install instructions (#1811)
Recommend installing uv on windows with

```
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```

instead of

```
irm https://astral.sh/uv/install.ps1 | iex
```

to support installing on cmd.exe, the classic non-powershell windows
command prompt.

See https://github.com/axodotdev/cargo-dist/issues/458 for background.
This will also be included in the next cargo-dist release.

I have confirmed this passes on
 * Command Prompt
 * Windows PowerShell
 * PowerShell
 * git bash

Closes #1750

CC @12932 this fixes the uv command prompt installation.
2024-02-22 09:25:33 +00:00
Zanie Blue
d80eee1f8c Add docs for git authentication (#1844)
[Rendered](https://github.com/astral-sh/uv/blob/zb/auth-docs/README.md#git-authentication)

Adds docs for
- #1781 
- #1717
2024-02-21 21:30:11 -05:00
samypr100
b3be53bb46 [docs] Update README.md to include extras example (#1806)
## Summary

<!-- What's the purpose of the change? What does it do, and why? -->
There was no example of to hint support for extras in the README.md.

I added one example in the install section that is used in the uv tests.
2024-02-21 20:13:07 -06:00
samypr100
f441f8fa9b docs: update venv activation for windows (#1836)
## Summary

Follow on to PR https://github.com/astral-sh/uv/pull/1811 as part of
issue https://github.com/astral-sh/uv/issues/1750. This change updates
the windows venv activation to work for both Powershell and Command
Prompt instead of just Powershell. This also aligns with what `uv venv`
displays.
2024-02-21 22:16:40 +00:00
Orhun Parmaksız
25f0157f0a docs(readme): add instructions for installing on Arch Linux (#1765)
## Summary

I packaged `uv` in the official repositories:
https://archlinux.org/packages/extra/x86_64/uv/

This PR simply updates README.md to add the instructions to install the
package.

## Test Plan

None.
2024-02-20 11:33:56 -05:00
12932
f668fd8d59 Clarify Windows install command in README.md (#1751)
Specify that the command to run for Windows is for powershell

## Summary

Clarifies the usage of the command to run to install uv on Windows
(powershell only)

## Test Plan

It wasn't 😈

---------

Co-authored-by: konsti <konstin@mailbox.org>
2024-02-20 12:54:35 +00:00
Charlie Marsh
bb876d95ed Move uv clean to uv cache clean (#1733)
## Summary

This opens up space to add other cache-related commands. (`uv clean`
continues to work for backwards compatibility but is hidden from the
CLI.)
2024-02-20 04:14:05 +00:00
Henry Schreiner
c6fd3d97fb fix: remove uv version from uv pip compile header (#1716)
## Summary

This fixes https://github.com/astral-sh/uv/issues/1704 by removing the
version from the produced header.

## Test Plan

Checked with clippy, and tests are updated too.
2024-02-19 20:26:53 +00:00
kopp
4b92a51218 fix: use --override rather than -o to specify overrides in README.md (#1668)
## Summary

Fix documentation (Readme.md):
`-o` is the short for `--output-file`, so using `-o overrides.txt` would
store the output in `overrides.txt` rather than using that as overrides.

## Test Plan

no tests for docs (yet?)
2024-02-18 17:55:27 -06:00
Zanie Blue
fd1af476b2 Add brew to readme (#1629)
Closes https://github.com/astral-sh/uv/issues/1627
2024-02-18 07:49:50 +00:00
Charlie Marsh
1110489c29 Bump version to v0.1.3 (#1557) 2024-02-16 19:45:29 -05:00
Dylan Storey
63987e4f8f Provide example of file based package install. (#1424)
Added example to install packages from a file w/o editable mode.

I use `pip install .` in a number of CI/CD and build scripts - it wasn't
obvious to me how to achieve this with uv as `uv pip install .` throws
an error about package names being expected to start with an
alphanumeric character.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2024-02-16 14:34:04 +00:00
Charlie Marsh
659327f24a Bump version to v0.1.2 (#1439) 2024-02-16 01:17:19 -05:00
Jacob Coffee
33dd5f0f90 chore(docs): update wording and add alt tag (#1423)
Small grammar updates for word flow

I believe the "Support for a wide range of advanced..." section could
also be changed to a sub-bullet list if this is more preferred?

Feel free to close :)

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2024-02-16 05:22:44 +00:00
CJ
8ef396e849 Update README.md to include venv activate (#1411)
This is just a small readme change to include venv activation.
In case someone just follows the docs as-is, they will end up installing
packages outside of the desired virtual env.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2024-02-15 20:20:25 -06:00
Brett Cannon
515a494f05 Tweak some grammar in the README (#1387) 2024-02-16 00:10:07 +00:00
Charlie Marsh
3559f0e6ab Re-add license badge to the README (#1333) 2024-02-15 17:22:08 -05:00
Zanie Blue
c43a5ba3aa Replace "novel" in README (#1365)
Per some prior discussion, "novel" can be confusing in this context as
it's not clear what we're referring to.

PDM supports overrides — so I'll just drop this.

If anyone knows of other tools that support overrides and alternative
resolution strategies please let me know I'd love to look at how they've
implemented it :)
2024-02-15 22:09:27 +00:00
Jared Forsyth
12caff3850 grammar nit (#1345) 2024-02-15 21:22:29 +00:00
Zanie Blue
12c19ce506 Drop license badge for now; cached as UNKNOWN on CDNs (#1328)
We don't want to confuse people.

It's MIT / Apache dual licensed.

We'll restore this later once the cache is refreshed.
2024-02-15 13:57:59 -06:00
Zanie Blue
2586f655bb Rename to uv (#1302)
First, replace all usages in files in-place. I used my editor for this.
If someone wants to add a one-liner that'd be fun.

Then, update directory and file names:

```
# Run twice for nested directories
find . -type d -print0 | xargs -0 rename s/puffin/uv/g
find . -type d -print0 | xargs -0 rename s/puffin/uv/g

# Update files
find . -type f -print0 | xargs -0 rename s/puffin/uv/g
```

Then add all the files again

```
# Add all the files again
git add crates
git add python/uv

# This one needs a force-add
git add -f crates/uv-trampoline
```
2024-02-15 11:19:46 -06:00
Charlie Marsh
328b116d5d Fix README (#1315)
Oversight and typo.
2024-02-15 17:01:54 +00:00
Charlie Marsh
8bc81aaf70 Update README (#1307) 2024-02-15 09:54:29 -05:00
Charlie Marsh
ea13d94c57 Fix dependency overrides link in README (#1297) 2024-02-13 17:09:18 +00:00
Zanie Blue
942e353f65 Change ordering of highlights in readme (#1289)
Also, shorten some more items
2024-02-12 18:45:26 -06:00
Zanie Blue
2a3e817d53 Shorten the novel features highlight in README (#1265) 2024-02-12 20:04:50 +00:00
Charlie Marsh
929715f4e2 Swap out Discord icon (#1287) 2024-02-12 19:29:22 +00:00
Zanie Blue
ffb19b9a52 Add a error messages highlight to the README (#1264) 2024-02-08 23:12:22 +00:00
Charlie Marsh
0e35041ccd Add Python version support (#1239)
Closes https://github.com/astral-sh/puffin/issues/1221.
2024-02-04 21:56:00 +00:00
Charlie Marsh
fcf848877c Change 'duplication' to 'deduplication' (#1223) 2024-02-01 14:13:45 +00:00
Charlie Marsh
ec816a3322 Update Python discovery documentation (#1194)
Closes https://github.com/astral-sh/puffin/issues/1109.
2024-01-31 15:42:32 +00:00
Charlie Marsh
7ae9d3c631 Remove Windows limitation from README (#1195) 2024-01-30 21:39:15 +00:00
Charlie Marsh
d94cf0e763 Remove specific MUSL mention from README (#1171)
See:
https://github.com/astral-sh/puffin/pull/1158#discussion_r1469603073.
2024-01-29 13:50:23 +00:00
Charlie Marsh
fe03e74669 Add platform support to the README (#1158)
Closes https://github.com/astral-sh/puffin/issues/1149.
2024-01-28 22:52:25 -05:00
konsti
39021263dd Windows launchers using posy trampolines (#1092)
## Background

In virtual environments, we want to install python programs as console
commands, e.g. `black .` over `python -m black .`. They may be called
[entrypoints](https://packaging.python.org/en/latest/specifications/entry-points/)
or scripts. For entrypoints, we're given a module name and function to
call in that module.

On Unix, we generate a minimal python script launcher. Text files are
runnable on unix by adding a shebang at their top, e.g.

```python
#!/usr/bin/env python
```

will make the operating system run the file with the current python
interpreter. A venv launcher for black in `/home/ferris/colorize/.venv`
(module name: `black`, function to call: `patched_main`) would look like
this:

```python
#!/home/ferris/colorize/.venv/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from black import patched_main
if __name__ == "__main__":
    sys.argv[0] = re.sub(r"(-script\.pyw|\.exe)?$", "", sys.argv[0])
    sys.exit(patched_main())
```

On windows, this doesn't work, we can only rely on launching `.exe`
files.

## Summary

We use posy's rust implementation of a trampoline, which is based on
distlib's c++ implementation. We pre-build a minimal exe and append the
launcher script as stored zip archive behind it. The exe will look for
the venv python interpreter next to it and use it to execute the
appended script.

The changes in this PR make the `black` entrypoint work:

```powershell
cargo run -- venv .venv
cargo run -q -- pip install black
.\.venv\Scripts\black --version
```

Integration with our existing tests will be done in follow-up PRs.

## Implementation and Details

I've vendored the posy trampoline crate. It is a formatted, renamed and
slightly changed for embedding version of
https://github.com/njsmith/posy/pull/28.

The posy launchers are smaller than the distlib launchers, 16K vs 106K
for black. Currently only `x86_64-pc-windows-msvc` is supported. The
crate requires a nightly compiler for its no-std binary size tricks.

On windows, an application can be launched with a console or without (to
create windows instead), which needs two different launchers. The gui
launcher will subsequently use `pythonw.exe` while the console launcher
uses `python.exe`.
2024-01-26 13:54:11 +00:00
Zanie Blue
73fccdd5c6 Add new features to the highlights in README (#939) 2024-01-16 14:03:44 -05:00
Charlie Marsh
249ca10765 Move Puffin subcommands to a pip namespace (#921)
## Summary

This makes the separation clearer between the legacy `pip` API and the
API we'll add in the future for the package manager itself. It also
enables seamless `puffin pip` aliasing for those that want it.

Closes #918.
2024-01-15 16:36:45 +00:00
Charlie Marsh
05029d219f Remove --find-links limitation from README (#922)
These are now supported.
2024-01-15 03:09:15 +00:00
konsti
673bece595 Allow pip-compile without a venv (#494)
The semantics are a bit unintuitive because `--python-version` is a
preference when looking for a python version without a venv, but if we
don't find that exact version we'll take `python3` and patch the
markers. This will make more sense once we start provisioning python
builds.

We can now resolve black with both python 3.8 and 3.12, with or without
that python version being in scope. In the example below,
`PATH=$HOME/.cargo/bin:/usr/bin` removes the pyenv builds and leaves
only `python3`, which is python 3.11.

```console
$ RUST_LOG=puffin::commands=debug cargo run --bin puffin -q -- pip-compile -v scripts/benchmarks/requirements/black.in --python-version py38
    0.004108s DEBUG puffin::commands::pip_compile Using Python 3.8 at /home/konsti/.local/bin/python3.8
Resolved 8 packages in 44ms
# This file was autogenerated by Puffin v0.0.1 via the following command:
#    puffin pip-compile -v scripts/benchmarks/requirements/black.in --python-version py38
black==23.11.0
[...]
platformdirs==4.0.0
    # via black
tomli==2.0.1
    # via black
typing-extensions==4.8.0
    # via black
$ PATH=$HOME/.cargo/bin:/usr/bin RUST_LOG=puffin::commands=debug cargo run --bin puffin -q -- pip-compile -v scripts/benchmarks/requirements/black.in --python-version py38
    0.004315s DEBUG puffin::commands::pip_compile Using Python 3.11 at /usr/bin/python3
Resolved 8 packages in 43ms
# This file was autogenerated by Puffin v0.0.1 via the following command:
#    puffin pip-compile -v scripts/benchmarks/requirements/black.in --python-version py38
black==23.11.0
[...]
platformdirs==4.0.0
    # via black
tomli==2.0.1
    # via black
typing-extensions==4.8.0
    # via black
```

```console
$ RUST_LOG=puffin::commands=debug cargo run --bin puffin -q -- pip-compile -v scripts/benchmarks/requirements/black.in --python-version py312
    0.004216s DEBUG puffin::commands::pip_compile Using Python 3.12 at /home/konsti/.local/bin/python3.12
Resolved 6 packages in 37ms
# This file was autogenerated by Puffin v0.0.1 via the following command:
#    puffin pip-compile -v scripts/benchmarks/requirements/black.in --python-version py312
black==23.11.0
[...]
platformdirs==4.0.0
    # via black
$ PATH=$HOME/.cargo/bin:/usr/bin RUST_LOG=puffin::commands=debug cargo run --bin puffin -q -- pip-compile -v scripts/benchmarks/requirements/black.in --python-version py312
    0.004190s DEBUG puffin::commands::pip_compile Using Python 3.11 at /usr/bin/python3
Resolved 6 packages in 39ms
# This file was autogenerated by Puffin v0.0.1 via the following command:
#    puffin pip-compile -v scripts/benchmarks/requirements/black.in --python-version py312
black==23.11.0
[...]
platformdirs==4.0.0
    # via black
```

Fixes #235.

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-01-05 15:01:06 +00:00
Charlie Marsh
76064cdec2 Document Python interpreter discovery in README (#792) 2024-01-05 09:44:06 -05:00
Charlie Marsh
1f79f9e2b8 Tweak the README (#768) 2024-01-04 00:36:33 -05:00
Charlie Marsh
0bdd831a0d Add an up-to-date README with Puffin documentation (#754) 2024-01-04 02:22:01 +00:00
Charlie Marsh
17228ba04e Add support for path dependencies (#471)
## Summary

This PR adds support for local path dependencies. The approach mostly
just falls out of our existing approach and infrastructure for Git and
URL dependencies.

Closes https://github.com/astral-sh/puffin/issues/436. (We'll open a
separate issue for editable installs.)

## Test Plan

Added `pip-compile` tests that pre-download a wheel or source
distribution, then install it via local path.
2023-11-21 11:49:42 +00:00
Charlie Marsh
13ba4405aa Update README and crates manifest (#419) 2023-11-14 01:20:07 +00:00
Charlie Marsh
4eed03d8e7 Update README limitations (#363) 2023-11-08 03:01:33 +00:00
Charlie Marsh
e15b99b911 Rename commands to pip-sync and pip-compile (#123)
To free up the rest of the interface.
2023-10-18 21:15:20 +00:00
Charlie Marsh
239b5893d8 Fix version satisfier for unpinned dependencies (#74) 2023-10-09 11:48:39 -04:00
Charlie Marsh
75cb7a0178 Add benchmark scripts (#69)
Moving these out of the README and into proper scripts.
2023-10-08 23:37:38 +00:00
Charlie Marsh
2a846e76b7 Store unzipped wheels in a cache (#49)
This PR massively speeds up the case in which you need to install wheels
that already exist in the global cache.

The new strategy is as follows:

- Download the wheel into the content-addressed cache.
- Unzip the wheel into the cache, but ignore content-addressing. It
turns out that writing to `cacache` for every file in the zip added a
ton of overhead, and I don't see any actual advantages to doing so.
Instead, we just unzip the contents into a directory at, e.g.,
`~/.cache/puffin/django-4.1.5`.
- (The unzip itself is now parallelized with Rayon.)
- When installing the wheel, we now support unzipping from a directory
instead of a zip archive. This required duplicating and tweaking a few
functions.
- When installing the wheel, we now use reflinks (or copy-on-write
links). These have a few fantastic properties: (1) they're extremely
cheap to create (on macOS, they are allegedly faster than hard links);
(2) they minimize disk space, since we avoid copying files entirely in
the vast majority of cases; and (3) if the user then edits a file
locally, the cache doesn't get polluted. Orogene, Bun, and soon pnpm all
use reflinks.

Puffin is now ~15x faster than `pip` for the common case of installing
cached data into a fresh environment.

Closes https://github.com/astral-sh/puffin/issues/21.

Closes https://github.com/astral-sh/puffin/issues/39.
2023-10-08 04:04:48 +00:00
Charlie Marsh
a46887d34b Add motivation to README (#47) 2023-10-07 23:39:56 +00:00