Подтвердить что ты не робот

Как сделать пип "сухим"?

Для разработки script, который работает pip install, было бы полезно иметь функцию --dry-run.

Я столкнулся с опцией --no-install. Но этот вариант устарел и ссылается на ссылки . Есть подсказки, чтобы распаковать пакет только, но я не могу найти параметр unpack в документации по протоколу.

4b9b3361

Ответ 1

Да - пип должен иметь параметр dry-run, чтобы указать, что произойдет в сложной ситуации. Это опасно при запуске pip install понижения пакетов без запроса. Нам нужно как-то спросить, что произойдет, если мы запустим pip install -r requirements.txt без тщательного поиска по всем требованиям и сравнения их с установленными в настоящее время.

Похоже, setup.py используется для dry-run. Люди просят об этом в другом месте.

Некоторый прогресс в этом направлении можно найти здесь:

Ответ 2

Кажется, вы правы, он устарел (ref).

Если при пробном запуске вы имеете в виду тестирование его перед фактической установкой пакета в определенном месте, предположительно перед установкой системы, вы можете просто запустить его в песочнице с использованием виртуальной среды, а затем просто отказаться от среды.

virtualenv /tmp/venv; /tmp/venv/bin/pip install flask; rm -rf /tmp/venv 

Не так лаконично, как использовать аргумент dry-run для pip, но он выполняет эту работу. Кроме того, если вы хотите сделать сухой запуск серии пакетов, опустите удаление в конце.

В script вы можете перенаправить его в процедуру:

#!/bin/bash

TMP_DIR='/tmp/venv'

function dry_run (){
    if [ ! -d "$TMP_DIR" ]; then
            virtualenv /tmp/venv
    fi
    /tmp/venv/bin/pip install $1
}

dry_run flask
dry_run uwsgi
rm -rf $TMP_DIR

Если вы хотите выполнить сухой прогон, который проверяет, что новая версия (и) хорошо работает с развернутой системой, затем используйте параметр virtualenv system-site-packages.

virtualenv --system-site-packages /tmp/venv; /tmp/venv/bin/pip install flask; rm -rf /tmp/venv

Ответ 3

[Ugly hack disclaimer] в Linux вы можете попытаться установить в системном расположении как пользователь, у которого нет разрешения на установку в каталог /usr/. Команда завершается с ошибкой "Отказано в доступе", но только после регистрации того, что отсутствует, а что нет.

(заставляет задуматься, насколько трудно будет реализовать реальный вариант пробного запуска)

Ответ 4

Команда pip-sync из pip-tools может сообщить, какие пакеты будут установлены, но также выведет те, которые установлены, но не в файле требований. Вариант -n запуска - -n

$ pip install pip-tools
$ pip-sync -n requirements.txt 
Would uninstall:
  pip-tools
Would install:
  requests

Вот помощь от pip-sync:

pip-sync --help
Usage: pip-sync [OPTIONS] [SRC_FILES]...

  Synchronize virtual environment with requirements.txt.

Options:
  --version               Show the version and exit.
  -n, --dry-run           Only show what would happen, don't change anything
  --force                 Proceed even if conflicts are found
  -f, --find-links TEXT   Look for archives in this directory or on this HTML
                          page
  -i, --index-url TEXT    Change index URL (defaults to PyPI)
  --extra-index-url TEXT  Add additional index URL to search
  --trusted-host TEXT     Mark this host as trusted, even though it does not
                          have valid or any HTTPS.
  --no-index              Ignore package index (only looking at --find-links
                          URLs instead)
  -q, --quiet             Give less output
  --user                  Restrict attention to user directory
  --cert TEXT             Path to alternate CA bundle.
  --client-cert TEXT      Path to SSL client certificate, a single file
                          containing the private key and the certificate in
                          PEM format.
  --help                  Show this message and exit.

Ответ 5

С пипсом версии 9 появилась новая опция --format freeze, которая приводит к элегантному однострочному решению для случая использования pip install -r:

pip list --format freeze | diff - requirements.txt