我怎样才能知道我正在使用哪个Python实现?

81
Python有几种不同的实现:CPython、Jython、PyPy等。我想以编程的方式确定我的代码正在运行的是哪种实现。我该如何做到这一点?
具体来说,我正在寻找一个函数,比如`get_implementation_name()`,可以这样使用:
impl_name = get_implementation_name()
if impl_name == "CPython":
    print "I can abuse CPython implementation details. (I'm a bad, bad man.)"
elif impl_name == "PyPy":
    print "Can't count on reference-counting garbage collection here..."
else:
    print "I better be careful..."

5
在问题中说“为我编写一个函数”从来不是一个好的做法。 - millimoose
16
我不同意,强烈反对。我们是程序员。有时候,代码比散文更清晰。说“这里有一些代码,请填写缺少的函数”可以非常简明地解释您的要求,并消除了某些潜在的混淆因素。 - Stuart Berg
10
这段话的意思是:这种表达方式让人感觉你很苛刻,好像是一个“请给我代码”的人。也许这不是你提问的本意,但你会冒着让读者的“蜥蜴大脑”受到刺激而在正确理解问题之前跳过你的问题的风险。请理解,在这里对问题进行批评的目的不是让你感觉做错了什么而变得愚蠢,而是告诉你如何吸引和保留最多的注意力。(另请参见:毫无意义的防御性附言。) - millimoose
3
没问题。如果我的评论听起来有所辩解,对不起。感谢你的建议。 - Stuart Berg
5
是的,我完全同意 superbatfish 的看法。这仍然是一个最简洁、明确且幽默的问题变体,保证会引起混淆和歧义。我的意思是:"我可以滥用CPython的实现细节"。太棒了!应该表扬 superbatfish——而不是责备他——因为这个Python式的嬉皮笑脸。 - Cecil Curry
2个回答

149

4
好的,我感到有些愚蠢。我想一个可以接受的答案是:import platform; get_implementation_name = platform.python_implementation :-) - Stuart Berg
1
@DSM:是的,platform.python_implementation在Python2.6中被引入。 - unutbu
这就表明了如果我不跟上时代,会发生什么事情! - DSM
1
我们能将Python的实现从CPython更改为PyPy吗?如果可以,我们该如何做到这一点? - Gaurav Parashar
如果你有另外一个问题,请单独提出来问。 - OrangeDog

17

关于platform怎么样?

它会为你提供什么。

platform.python_implementation()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接