AcademySoftwareFoundation / AcademySoftwareFoundation/rez

NoneType Error When Using `rez pip` on Windows

Open
#1,024 2 comments 0 reactions 0 assignees View on GitHub
bug rez-pip
Dominant language
Python
Stars
1.1k
Forks
374
Avg merge
9d 12h
Merged PRs (30d)
5

Description

On Windows (using PowerShell or command prompt), I get a `NoneType` error when running`rez pip -i pylint` (although it doesn't matter which package I try to install).

```Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\rez\2.72.0\Scripts\rez\rez.exe\__main__.py", line 7, in
File "c:\rez\2.72.0\lib\site-packages\rez\cli\_entry_points.py", line 64, in run_rez
return run()
File "c:\rez\2.72.0\lib\site-packages\rez\cli\_main.py", line 170, in run
returncode = run_cmd()
File "c:\rez\2.72.0\lib\site-packages\rez\cli\_main.py", line 162, in run_cmd
return func(opts, opts.parser, extra_arg_groups)
File "c:\rez\2.72.0\lib\site-packages\rez\cli\pip.py", line 70, in command
pip_install_package(
File "c:\rez\2.72.0\lib\site-packages\rez\pip.py", line 267, in pip_install_package
py_exe, context = find_pip(pip_version, python_version)
File "c:\rez\2.72.0\lib\site-packages\rez\pip.py", line 94, in find_pip
py_exe, found_pip_version, context = find_pip_from_context(
File "c:\rez\2.72.0\lib\site-packages\rez\pip.py", line 209, in find_pip_from_context
proc = context.execute_command(
File "c:\rez\2.72.0\lib\site-packages\rez\resolved_context.py", line 958, in _check
return fn(self, *nargs, **kwargs)
File "c:\rez\2.72.0\lib\site-packages\rez\resolved_context.py", line 1221, in execute_command
return interpreter.subprocess(args, **Popen_args)
File "c:\rez\2.72.0\lib\site-packages\rez\rex.py", line 655, in subprocess
return Popen(args,
File "c:\rez\2.72.0\lib\site-packages\rez\utils\execution.py", line 85, in __init__
super(Popen, self).__init__(args, **kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 947, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1356, in _execute_child
args = list2cmdline(args)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 561, in list2cmdline
for arg in map(os.fsdecode, seq):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\os.py", line 822, in fsdecode
filename = fspath(filename) # Does type-checking of `filename`.
TypeError: expected str, bytes or os.PathLike object, not NoneType
```

The problem appears to be that `find_python_in_context` can return `None` which is then unhandled in the calling `find_pip_from_context`.

In my case, `find_python_in_context` returns `None` because `shutilwhich.which` is unable to locate the `python` executable. While `which` is looking for `python.exe` (among other path extensions) the python package I created with `rez bind` only contains a `python` executable (symlink) without an extension.

I've created an additional `python.exe` symlink to work around this for the moment.

Contributor guide

Open the contributing guide

Research direction

Start in rez/pip.py with find_python_in_context and find_pip_from_context, then reproduce rez pip -i pylint on Windows using a bound Python package containing only an extensionless python executable. Verify the missing result is handled and that the command no longer reaches subprocess with a None executable.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.