怎么做pip"干跑"?

时间:2015-04-09 06:14:49

标签: python pip

为了开发运行pip install的脚本,拥有--dry-run函数会很有用。

我遇到了--no-install选项。但是这个不推荐使用并且在电话参考this上。 有提示仅解压缩包,但我在pip文档中找不到unpack选项。

5 个答案:

答案 0 :(得分:14)

是 - pip应该有一个dry-run选项,以指示在复杂情况下会发生什么。在没有问你的情况下运行pip install降级软件包是危险的。我们需要一些方法来询问如果我们运行pip install -r requirements.txt而不费力地搜索所有要求并将它们与当前安装的要求进行比较会发生什么。

看起来setup.py曾经有dry-run。人们在其他地方要求它。

在这方面可以找到一些进展:

答案 1 :(得分:12)

看来你是对的,已被弃用(ref)。

如果通过试运行,您的意思是在实际在某个地方安装软件包之前测试它,大概是在系统范围内安装之前,那么您可以使用虚拟环境简单地运行沙盒,然后简单地丢弃环境。

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

不像使用干涸的论点那样简洁,但是它确实起作用了。此外,如果您想进行一系列包安装的干运行,请在最后省略删除。

在脚本中,您可以将其提炼为一个程序:

#!/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

答案 2 :(得分:1)

pip-sync中的pip-tools命令可以报告将要安装的软件包,但也将输出已安装但未在需求文件中的软件包。其空运行选项为-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.

答案 3 :(得分:0)

在Linux上的[丑陋的免责声明],您可以尝试以没有权限安装在/ usr /目录中的用户身份在系统位置进行安装。该命令失败,并显示“权限被拒绝”,但仅在记录缺少和没有的内容之后。

(让您想知道实际的空运行选项到底要实现多难)

答案 4 :(得分:-1)

使用pip版本9,有一个新选项--format freeze,可为pip install -r用例提供优雅的单行解决方案:

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