Skip to content

Commit

Permalink
Allow execution of pyw files on Unix (#9759)
Browse files Browse the repository at this point in the history
I don't see any real reason to forbid executing these in a
cross-platform way

```
❯ echo "print('hello world')" > test.pyw
❯ uv run test.pyw
error: Failed to spawn: `test.pyw`
  Caused by: No such file or directory (os error 2)
❯ cargo run -q -- run test.pyw
hello world
```

Closes #9757
  • Loading branch information
zanieb authored Dec 10, 2024
1 parent 341126c commit 5e5635c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 7 deletions.
17 changes: 11 additions & 6 deletions crates/uv/src/commands/project/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1173,7 +1173,7 @@ pub(crate) enum RunCommand {
/// Search `sys.path` for the named module and execute its contents as the `__main__` module.
/// Equivalent to `python -m module`.
PythonModule(OsString, Vec<OsString>),
/// Execute a `pythonw` script (Windows only).
/// Execute a `pythonw` GUI script.
PythonGuiScript(PathBuf, Vec<OsString>),
/// Execute a Python package containing a `__main__.py` file.
PythonPackage(PathBuf, Vec<OsString>),
Expand Down Expand Up @@ -1201,7 +1201,13 @@ impl RunCommand {
| Self::PythonRemote(..)
| Self::Empty => Cow::Borrowed("python"),
Self::PythonModule(..) => Cow::Borrowed("python -m"),
Self::PythonGuiScript(..) => Cow::Borrowed("pythonw"),
Self::PythonGuiScript(..) => {
if cfg!(windows) {
Cow::Borrowed("pythonw")
} else {
Cow::Borrowed("python")
}
}
Self::PythonStdin(_) => Cow::Borrowed("python -c"),
Self::External(executable, _) => executable.to_string_lossy(),
}
Expand Down Expand Up @@ -1413,10 +1419,9 @@ impl RunCommand {
&& is_file
{
Ok(Self::PythonScript(target_path, args.to_vec()))
} else if cfg!(windows)
&& target_path
.extension()
.is_some_and(|ext| ext.eq_ignore_ascii_case("pyw"))
} else if target_path
.extension()
.is_some_and(|ext| ext.eq_ignore_ascii_case("pyw"))
&& is_file
{
Ok(Self::PythonGuiScript(target_path, args.to_vec()))
Expand Down
1 change: 0 additions & 1 deletion crates/uv/tests/it/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,6 @@ fn run_pep723_script_requires_python() -> Result<()> {

/// Run a `.pyw` script. The script should be executed with `pythonw.exe`.
#[test]
#[cfg(windows)]
fn run_pythonw_script() -> Result<()> {
let context = TestContext::new("3.12");

Expand Down

0 comments on commit 5e5635c

Please sign in to comment.