Python 提示用户安装软件包";pip安装<;包装>&引用;

Python 提示用户安装软件包";pip安装<;包装>&引用;,python,stdout,pip,distutils,Python,Stdout,Pip,Distutils,我已经创建了一个包含setup.py文件的包的tar.gz。setup.py使用distutils.core中提供的setup()函数。我想在用户运行“pip install.tar.gz”时提示他们。不幸的是,pip似乎通过一个特殊的日志过滤器重定向了“python setup.py install”命令的所有stdout和stderr,该过滤器逐行读取stdout。这意味着我不能有诸如“Email:…”这样的提示,因为“Email:”在用户按下enter键之前不会被打印。此外,日志过滤器会缩

我已经创建了一个包含setup.py文件的包的tar.gz。setup.py使用distutils.core中提供的setup()函数。我想在用户运行“pip install.tar.gz”时提示他们。不幸的是,pip似乎通过一个特殊的日志过滤器重定向了“python setup.py install”命令的所有stdout和stderr,该过滤器逐行读取stdout。这意味着我不能有诸如“Email:…”这样的提示,因为“Email:”在用户按下enter键之前不会被打印。此外,日志过滤器会缩进输出的每一行,这并不理想。

不要这样做

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


不要试图在安装过程中创建所需的交互式会话,因为PIP和easy_install的理念是,它们也安装软件包的先决条件,因此它们可能会批量安装许多软件包,。用户只希望pip安装完成它的工作,一个意外的交互提示将破坏自动安装、预请求链、构建安装、远程安装等

我同意交互式安装可能会造成麻烦。在这种情况下,我不认为提示符会干扰先决条件链,因为它会在安装包时提示。还可以绕过交互式提示(关闭stdin/EOF),这将限制远程安装的问题。你认为我能得到什么?尽管存在您概述的所有潜在问题,但仍有一些程序具有交互式提示。如果提示失败,可以按照您的建议通过配置文件填充所有内容。我只是觉得直接问用户可能会更容易。apt-get在这方面只是小菜一碟。但是,回到Python——某些项目确实使用“buildout”——它可以用于下载、安装和配置数百个Python模块,以运行一个项目的单个实例。如果其中任何一项需要用户干预,它都不会起作用。基于构建(Buildout-based)或Other-compelx项目当然受益于拥有一个自动化的“构建”(build),它将所有东西都放在一个自动化服务器中,并运行单元测试。需要用户干预也会打破这种局面。每一个例子都可以详细说明。