检测IronPython的最佳方法

15 投票
4 回答
3584 浏览
提问于 2025-04-15 22:30

我需要写一个模块,这个模块要能在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(不过这其实也不是你问题的一部分)。

撰写回答