如何猴子修补“ python --version”命令?

问题描述

-v / --version标志用于打印相应的python解释器的版本。

例如,如果python是Python 3.7.9解释器的别名,则该标志将输出以下内容:

$ python --version
Python3.7.9

有人可以创建一个Python模块,在安装猴子时为用户修补此命令吗?需要注意的是,这需要跨平台。怎么会这样呢?

例如,假设我在PyPI上上传了my-package。如果安装了它,它将修改pyhton -v / python --version的行为。

$ python --version
Python3.7.9
$ pip install my-package
...
$ python --version
<some custom text>

最好在卸载后,-v / --version恢复正常。

解决方法

我们可以查看initconfig.c line 1900上的解析命令行参数的代码(在此示例中,对于CPython)。

如果提供了--version-V标志,则print_version变为非零,从而触发line 2051上的条件:

if (print_version) {
    printf("Python %s\n",(print_version >= 2) ? Py_GetVersion() : PY_VERSION);
    return _PyStatus_EXIT(0);
}

因此,上述模块将需要以某种方式修改PY_VERSION的值或Py_GetVersion()的输出。

更改PY_VERSION是不可能的,因为它是hard-coded in patchlevel.h

since it uses PY_VERSION也无法修改Py_GetVersion()的输出。

所以看来答案是否定的,如果不重新编译整个解释器,这是不可能的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...