15

CPython と IronPython の両方から使用されるモジュールを作成する必要があります。その場合は少し異なる動作が必要なので、IronPython を検出する最良の方法は何ですか?

sys.platform は CPython では「win32」ですが、IronPython では「cli」であることに気付きました。

それを検出する別の優先/標準的な方法はありますか?

4

4 に答える 4

17

Python 2.6 の新機能は次のplatform.python_implementationとおりです。

Python 実装を識別する文字列を返します。可能な戻り値は、'CPython'、'IronPython'、'Jython' です。

これがおそらく最もクリーンな方法であり、標準的な方法です。ただし、Jython はまだ 2.5 を実行していると思いますので、これを信頼して Jython を検出できるかどうかはまだわかりません (ただし、それは質問の一部ではありませんでした)。

于 2010-05-08T18:59:26.167 に答える
5

次のコードは、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()
于 2010-09-02T04:16:56.600 に答える
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
于 2013-11-28T03:15:43.373 に答える
2

「cli」(= Common Language Infrastructure = .NET = IronPython) はおそらく信頼できます。

私の知る限り、IronPython 内で .NET ライブラリにアクセスできるので、.NET ライブラリをインポートしてみて、(CPython のように).NET が利用できないときにスローされる例外をキャッチできます。

于 2010-05-08T18:57:44.290 に答える