mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-04 19:08:04 +00:00
Wrap unsafe script shebangs in /bin/sh
(#2097)
## Summary This is based on Pradyun's installer branch (d01624e5f2/src/installer/scripts.py (L54)
), which is itself based on pip (0ad4c94be7/src/pip/_vendor/distlib/scripts.py (L136)
). The gist of it is: on Posix platforms, if a path contains a space (or is too long), we wrap the shebang in a `/bin/sh` invocation. Closes https://github.com/astral-sh/uv/issues/2076. ## Test Plan ``` ❯ cargo run venv "foo" Finished dev [unoptimized + debuginfo] target(s) in 0.14s Running `target/debug/uv venv foo` Using Python 3.12.0 interpreter at: /Users/crmarsh/.local/share/rtx/installs/python/3.12.0/bin/python3 Creating virtualenv at: foo Activate with: source foo/bin/activate ❯ source "foo bar/bin/activate" ❯ which black black not found ❯ cargo run pip install black Resolved 6 packages in 177ms Installed 6 packages in 17ms + black==24.2.0 + click==8.1.7 + mypy-extensions==1.0.0 + packaging==23.2 + pathspec==0.12.1 + platformdirs==4.2.0 ❯ which black /Users/crmarsh/workspace/uv/foo bar/bin/black ❯ black Usage: black [OPTIONS] SRC ... One of 'SRC' or 'code' is required. ❯ cat "foo bar/bin/black" #!/bin/sh '''exec' '/Users/crmarsh/workspace/uv/foo bar/bin/python' "$0" "$@" ' ''' # -*- 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()) ```
This commit is contained in:
parent
b62a81549b
commit
e811070ef1
3 changed files with 74 additions and 5 deletions
|
@ -444,6 +444,7 @@ impl Interpreter {
|
|||
} else {
|
||||
self.include().to_path_buf()
|
||||
},
|
||||
os_name: self.markers.os_name.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue