“pythonv”的输出是否被认为是稳定的/可用的API?

2024-10-04 09:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

python -Vpython -c 'import sys; print(".".join(map(str, sys.version_info[:3])))'快约40%。你知道吗

但是python -V被认为是稳定的吗?你知道吗

至少它以前是在python3.4(http://bugs.python.org/issue18338)之前打印到stderr的,这要求您使用python -V 2>&1(这已经慢了一点)。你知道吗

然而,主要的问题是:获得python版本的最快方法是什么?你知道吗

有比python -V 2>&1 | cut -f2 -d' '更好的吗?你知道吗


Tags: 方法orgimport版本infohttpmapversion
2条回答

你有两个问题。我将跳过“什么是最快的方法”,只回答主要问题。你知道吗

But is python -V considered to be as stable?

绝对不是。所有这些documented就是:

Print the Python version number and exit. Example output could be:

Python 3.0
  • 正如你自己指出的,它不仅没有记录在哪里打印,而且他们在3.3和3.4之间更改了它。你知道吗
  • 格式没有任何保证。甚至文档中的例子也不是你想要的格式。(我假设另一个例子中的[:3]意味着您实际上需要3.0.2,而不是3.0)。你知道吗
  • 实际上,您的脚本甚至没有为每个流行的Python解释器获得X.Y.Z版本。
    • PyPy报告两个版本号,Python语言的版本和pypypy解释器的版本。如果我在pypyvirtualenv中运行您的脚本,它会给我两个值,2.7.82.5.0。在这种情况下,你想要的是第一个,但你在多大程度上相信“在这种情况下”?你知道吗
    • Jython只报告了一个版本号,即2.2、2.5和2.7之前版本的前两位所需的版本号,但是有2.3之前的版本不支持大多数Python2.3,但仍然称自己为2.3.0。你知道吗

相比之下,^{}文档中给出的三个整数正是您想要的。(好吧,只要您不需要python1.5兼容性,因为version_info直到1.6/2.0才存在。)

还请注意,文档明确指出不要从sys.version中提取版本信息,我认为这比python -V更稳定(正如在所有主要实现中解释的那样,这意味着它实际上必须从Python版本号开始,尽管它有点模糊)。你知道吗

但你并不在乎它是否“稳定”,你只在乎它是否“足够稳定”。答案至少部分是主观的,而且非常依赖于使用。如果它适用于您关心的每个Python版本和实现(假设您知道并可以测试所有您关心的实现……),那么它就足够稳定了,对吗?你知道吗

我认为如果您想以编程方式确定Python解释器的版本,您应该只import sys并读取sys.version_info。你知道吗

python -c 'import sys; print sys.version_info.major, sys.version_info.minor, sys.version_info.micro'

相关问题 更多 >