检测IronPython的最佳方法
我需要写一个模块,这个模块要能在CPython和IronPython这两种环境中使用。请问有什么好的方法来判断是不是在使用IronPython呢?因为在这种情况下,我需要稍微调整一下行为。
我发现,在CPython中,sys.platform的值是"win32",而在IronPython中,它的值是"cli"。
有没有其他更好的、标准的方法来检测呢?
4 个回答
3
理想情况下:
is_ironpython = platform.python_implementation() == "IronPython"
但不幸的是,平台模块在不同的Python版本中并没有一致的实现(有些情况下甚至根本没有实现... *咳咳* Jython *咳咳*)。
我使用的是这个:
if hasattr(platform, "python_implementation"):
is_ironpython = "ironpython" in platform.python_implementation.lower()
else:
try:
import clr
except ImportError:
is_ironpython = False
else:
is_ironpython = True
6
下面的代码在CPython 2.6和Iron Python 2.6(.NET 2.0)上可以正常运行。
但是在Iron Python 2.6(.NET 4.0)上就不行了,因为在解析版本号的时候,platform.py这个文件出现了一些问题。我已经向Python.org提交了一个缺陷报告。修复platform.py其实并不难。
import sys
import platform
def IsIronPython():
return platform.python_implementation().lower().find("ironpython")!=-1
print IsIronPython()
17
在Python 2.6中新增了一个功能,叫做 platform.python_implementation
:
这个功能会返回一个字符串,用来标识你正在使用的Python版本。可能的返回值有:‘CPython’,‘IronPython’,‘Jython’。
这可能是最简单的方法,而且也算是比较标准的做法。不过,我觉得Jython现在还是在用2.5版本,所以我不太确定你能不能用这个方法来检测Jython(不过这其实也不是你问题的一部分)。