[英]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.