Как сделать пип "сухим"?
Для разработки script, который работает pip install
, было бы полезно иметь функцию --dry-run
.
Я столкнулся с опцией --no-install
. Но этот вариант устарел и ссылается на ссылки .
Есть подсказки, чтобы распаковать пакет только, но я не могу найти параметр unpack
в документации по протоколу.
Ответы
Ответ 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