繁体   English   中英

如何给“python --version”命令打补丁?

[英]How to monkey patch the “python --version” command?

-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第 1900行中解析命令行参数的代码(在本例中,用于 CPython)。

如果提供了--version-V标志,则print_version变为非零,这会触发第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是不可能的,因为它是patchlevel.h硬编码的

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM