You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:18:04