如何强制setup.py自动生成具有无缓冲输出模式的控制台脚本?
如何强制setup.py自动生成具有无缓冲输出模式的控制台脚本?
在Python 3中,我了解到构建Python命令行脚本的推荐方式是将其视为Python包的“入口点”,然后使用setup.py
来自动生成实际的脚本,该脚本基于包中的某个main()
函数。
我找到了一些不错的教程这里,这里和这里,它们解释了如何做到这一点。
自动生成脚本的问题是,我不确定如何控制脚本顶部通常出现的“shebang”行的内容(例如#!/usr/bin/env python
)-这部分是自动生成的。
我想设计命令行脚本,使得“shebang”行自动调用带有某些默认启用的Python标志的python
具体而言,我想以python -u
的方式运行脚本,以关闭stdout缓冲,如这里所述。
我需要在setup.py
文件中放入什么内容,以告诉setuptools
为我执行这个操作呢?当然,我可以在自动生成的脚本之后手动编辑它,但这似乎完全违背了自动生成控制台脚本的目的。是否有一种方法可以做到这一点,或者这只是使用“包入口点”模型创建命令行脚本的一个基本限制?
问题的原因是想要强制setup.py在自动生成控制台脚本时使用无缓冲输出模式。为了解决这个问题,有两种常见的方法。
第一种方法是通过编程方式实现。具体实现方法可以参考Stack Overflow上的一个答案,链接为https://stackoverflow.com/a/5443807/5682996。这个方法的基础是另一个答案,链接为https://stackoverflow.com/a/882060/5682996。
第二种方法是修改sys.executable或提供'execute'参数。具体实现方法可以参考Stack Overflow上的一个答案,链接为https://stackoverflow.com/a/17329493/5682996。需要注意的是,我不确定这种方法是否适用于'-u'选项。