Цель
Для каждого подкаталога в каталоге, содержащем setup.py
, запустите pip uninstall -y <directory name>
и pip install .
Решение для Windows
> for /D %f in (.\*) do (cd "%cd%\%f" && set s=%f && set j=%s:~3% && pip uninstall %j% && pip install .)
РЕДАКТИРОВАТЬ: Похоже, что удаление / переустановка pip может быть сделано с:
(for %F in ("%cd%") do pip uninstall -y "%~nxF") & pip install .
Решение Linux
#!/usr/bin/env bash
DIR="${DIR:-$PWD}
VENV="${VENV:-.venv}"
REQUIREMENTS="${REQUIREMENTS:-'requirements.txt'}";
if [ ! -d "$VENV/bin" ]; then
echo Cannot find "$VENV/bin"
exit 2;
fi
source "$VENV/bin/activate"
for f in "${DIR[@]}"; do
if [ -f "$f/setup.py" ]; then
builtin cd "$f";
pip uninstall -y "${PWD##*/}";
if [ -f "$REQUIREMENTS" ]; then
pip install -r "$REQUIREMENTS"
fi
pip install .;
builtin cd ..;
fi;
done
Как видите, мое решение для Linux гораздо более универсально. На самом деле мое решение для Windows не работает.
Решение для Windows сводит строки, поэтому между прогонами нет ничего детерминированного. Кажется, происходит какое-то странное расширение параметров. Как я должен делать это в CMD?