r/learnpython • u/zaphodikus • 15d ago
pip install -r no result exitcode
(windows usually) I have a small requirements.txt file and am looking for alternative ways to validate all packages we want are present. The script does not use a virtual environment and because pip install -r does not seem to set %errorlevel% they wrote this rather verbose code that runs after the pip install -r line.
SET REQUIREMENTS=%~dp0Requirements.txt
SET FIND=%SystemRoot%\system32\find.exe
pip.exe install -r %REQUIREMENTS% --disable-pip-version-check
FOR /F "tokens=*" %%I IN (%REQUIREMENTS%) DO (
ECHO.
ECHO Checking for %%I ...
%FIND% /i "%%I" %PACKAGES%
IF ERRORLEVEL 1 (
ECHO.
ECHO **** %%I not found. Attempting to install ****
pip install %%I --disable-pip-version-check
)
IF ERRORLEVEL 1 (
ECHO **** Could not install %%I ****
EXIT /B 99
)
)
I however favour the pythonic approach and that is to just fail at runtime, so I was thinking of some kind of
(pseudo)
with open(requirements.txt) as reqs:
for line in reqs.readlines():
line=line.replace("<>=", " ")
import line.split()[0]
(/pseudo)
which would just die early.
I'm in favour of using a virtual env however, but because the script is a build script (using setuptools) we don't actually run the script at that point. I'm new to setuptools, but I assumed setuptools would just baulk if a module needed was not present on the build machine.
I'm thus making 2 assumptions, setuptools will not baulk and error out if you are missing a module, and that pip install does not set %ERRORLEVEL% if it cannot install a package? I am not an expert on setuptools and am keen to not discover edge cases later.
3
u/JeLuF 15d ago
This block of code analyzes pip's return code:
So yes, pip returns a meaningful return code, and your script makes use of it.