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



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

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

$ python --version
Python3.7.9

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

例如,假设我在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行1900上解析命令行参数(在本例中,针对CPython(的代码。

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

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

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

改变PY_VERSION是不可能的,因为它在patchlevel.h中是硬编码的。

修改Py_GetVersion()的输出也是不可能的,因为它使用PY_VERSION

因此,答案似乎是否定的,如果不重新编译整个解释器,这是不可能的。