如何在setup.py中添加仅打印版本号的命令并去除多余日志输出
如何在setup.py中添加仅打印版本号的命令并去除多余日志输出
遇到这种情况挺常见的,setuptools的Command类默认会输出running <command>这类提示日志。这里有几个实用的方法帮你解决这个问题:
方法一:直接在setup()前处理命令行参数(推荐)
这个方法最简洁直接,不需要继承Command类,在setuptools初始化之前就处理自定义命令,完全绕过它的日志输出逻辑:
from setuptools import setup import sys def get_version(): return "5.2.4" # 优先处理自定义的print_version命令 if len(sys.argv) > 1 and sys.argv[1] == "print_version": print(get_version()) sys.exit() # 正常的setup配置 setup( name='MyPackageName', version=get_version(), url='https://github.com/mypackage.git', author='Author Name', author_email='author@gmail.com', description='Description of my package', )
运行python setup.py print_version时,会直接打印版本号然后退出,不会输出任何多余日志。
方法二:修改自定义Command类的日志行为
如果你坚持要用Command类的方式,可以通过修改Command的日志输出逻辑来关闭那行提示:
from setuptools import Command, setup def get_version(): return "5.2.4" class PrintVersionCommand(Command): user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): # 替换announce方法,让它不输出任何内容 self.announce = lambda msg, level: None print(get_version()) setup( cmdclass={ "print_version": PrintVersionCommand, }, name='MyPackageName', version=get_version(), url='https://github.com/mypackage.git', author='Author Name', author_email='author@gmail.com', description='Description of my package', )
或者也可以通过调整distutils的日志级别来屏蔽INFO级别的日志:
from setuptools import Command, setup import distutils.log def get_version(): return "5.2.4" class PrintVersionCommand(Command): user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): # 将日志级别设为ERROR,只输出错误日志,屏蔽默认的INFO提示 distutils.log.set_verbosity(distutils.log.ERROR) print(get_version()) setup( cmdclass={ "print_version": PrintVersionCommand, }, name='MyPackageName', version=get_version(), url='https://github.com/mypackage.git', author='Author Name', author_email='author@gmail.com', description='Description of my package', )
这两种方式都能去掉running print_version那行输出,只保留版本号。
备注:内容来源于stack exchange,提问作者PiRK
相关产品推荐
相关产品推荐

