【问题标题】:Prompting user on package install "pip install <pkg>"提示用户安装包“pip install <pkg>”
【发布时间】:2011-12-16 09:48:34
【问题描述】:

我创建了一个包含 setup.py 文件的包的 tar.gz。 setup.py 使用 distutils.core 中提供的 setup() 函数。我想在用户运行“pip install .tar.gz”时提示他们。不幸的是,看起来 pip 通过一个特殊的日志过滤器重定向了“python setup.py install”命令的所有标准输出和标准错误,该过滤器逐行读取标准输出。这意味着我不能有诸如“电子邮件:...”之类的提示,因为“电子邮件:”直到用户按下回车后才会打印。此外,日志过滤器会缩进每一行输出,这并不理想。

【问题讨论】:

    标签: python stdout pip distutils


    【解决方案1】:

    不要那样做。

    如果在安装过程中绝对需要用户提供信息,请要求设置环境变量,如果未设置则失败。更好的是,需要一个纯文本配置文件来运行您的模块 - 并在安装期间将其设置为默认值

    不要尝试在安装过程中创建需要的交互式会话,因为 PIP 和 easy_install 的想法是它们还安装了一个包的先决条件——因此它们可能会批量安装很多包。用户只会期望 pip install 完成它的工作,而意外的交互式提示将破坏自动安装、预先请求链、构建安装、远程安装等。

    【讨论】:

    • 我同意交互式安装可能令人讨厌。在这种情况下,我认为提示不会干扰先决条件链,因为它会在安装该软件包时提示。也可以绕过交互式提示(关闭标准输入/EOF),这将限制远程安装的问题。你觉得 apt-get 怎么样?尽管您列出了所有潜在问题,但仍有一些程序具有交互式提示。如果提示失败,可以按照您的建议通过配置文件填充所有内容。我只是认为直接询问用户可能更容易。
    • apt-get just s*cks 在这方面。但是,回到 Python ——某些项目确实使用“buildout”——它可用于下载、安装和配置数百个 Python 模块,以便运行一个项目的单个实例。如果其中任何一个需要用户干预,它就行不通。基于构建或 otehr compelx 项目肯定会受益于自动化“构建”,它将所有内容放在自动化服务器中并运行单元测试。要求用户干预也会破坏这种情况。这些示例中的每一个都可以详细说明。
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2015-08-17
    • 2018-07-27
    • 2021-04-18
    相关资源
    最近更新 更多