В рамках моего сценария bash я хочу устанавливать и удалять зависимости pip, имена которых у меня есть в файле, в неинтерактивном режиме. Я смог поискать и найти эти команды:
pip3 uninstall --yes -r host-requirements.txt
pip3 install --no-input -r host-requirements.txt
Мне не удалось найти параметры --yes
и --no-input
в справочном документе pip, и я не уверен, что они официально поддерживаются.
Мне интересно, почему этого нет в официальном документе. Означает ли это, что они могут прекратить поддержку без предварительного уведомления?
Для удаления вы можете использовать флаг --yes
или -y
, как описано здесь: https://pip.pypa.io/en/stable/reference/pip_uninstall/?highlight=--yes.
Для установки вы можете передать yes | pip install -r requirements.txt
как описано здесь: тихая установка python pip
Надеюсь это поможет.
видимо yes
не работает для некоторых сценариев, как указано в комментарии к сообщению, на которое вы дали ссылку.
Правильно, но yes
должен работать для установки pip. Это не сработает, когда, как в примере, вы хотите подтвердить подлинность сервера.
Проверка подлинности сервера — это то, что мы контролируем? возможно ли, что простой pip install -r
попадает в такую ситуацию?
Он не попадет в эту ситуацию, если в средней атаке нет человека, и вы не используете https, что вы и делаете. Когда вы запускаете установку pip, pip автоматически переходит к индексу пакета python (pypi.org) и захватывает пакет, ЕСЛИ вы не укажете другой индекс. Маловероятно, ИМО, что вы указываете индекс.
Есть больше интерактивных вопросов, которые предполагают другие ответы, чем «да». Например:
Directory /opt/services/spam/egg already exists, and is not a git clone.
What to do? (i)gnore, (w)ipe, (b)ackup`
В таком сценарии я обнаружил, что звонка echo "i" | pip install ...
было достаточно.
Распространенная проблема при установке заключается в том, что необходимо разрешить зависимость от частного репозитория и изначально добавить ключ удаленного сервера.
Obtaining file://...
Collecting your_private_package@ git+ssh://...
Cloning ssh://****@.../
Running command git clone -q 'ssh://****@.../
The authenticity of host can't be established.
RSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?
Для этого для ssh StrictHostKeyChecking
будет временно установлено значение no. Это можно сделать на уровне хоста или пользователя с меньшим риском для безопасности.
Это верно. Они поддерживаются
--no-input
здесь github.com/pypa/pip/blob/master/src/pip/_internal/cli/… и--yes
здесь github.com/pypa/pip/blob/master/src/pip/_internal/commands/…