【问题标题】:Can I detect if my code is running on cPython or Jython?我可以检测我的代码是在 cPython 还是 Jython 上运行?
【发布时间】:2010-11-09 08:43:12
【问题描述】:

我正在开发一个小型 django 项目,稍后将部署在 servlet 容器中。但是,如果我使用 cPython 而不是 Jython,开发会快得多。所以我想做的是在我的 settiings.py 中测试我的代码是否在 cPython 或 Jython 上运行,这样我就可以告诉它使用适当的数据库驱动程序(postgresql_psycopg2 或 doj.backends.zxjdbc.postgresql)。有没有简单的方法来做到这一点?

【问题讨论】:

    标签: python django jython


    【解决方案1】:

    在 Python 3.3 及更高版本中,您可以使用 sys.implementation 并查看 name 属性。

    【讨论】:

      【解决方案2】:

      最明确的方法是:

      导入平台

      platform.python_implementation()

      'CPython'

      默认情况下,大多数情况下底层解释器都是 CPython,这也可以说是最有效的解释器 :)

      【讨论】:

        【解决方案3】:

        正如孙强指出的那样

        import platform
        platform.system()
        

        适用于 Jython 2.5,但这不适用于 Jython 2.2(以前的 Jython 版本)。此外,还有一些关于在 Jython 3.x 中为此类调用返回更多操作系统特定细节的讨论。那里没有任何决定,但为了安全地向后和向前兼容,我建议使用:

        import sys
        sys.platform.startswith('java')
        

        它将为 Jython 返回 True,而在其他任何地方都返回 False(实际上在 Jython 2.2 或更早版本中,它为 Jython 返回 1,而在其他任何地方返回 0,但这在 if 语句和其他检查中仍然可以正常工作)。此调用至少在 Jython 2.1 中有效,并且在可预见的未来也有效。

        在 Python 2.6 或更高版本(注意 Jython 2.6 尚未发布)中,另一个选项是:

        import platform
        platform.python_implementation
        

        它为 Python 的 C 实现返回“CPython”,为 IronPython 返回“IronPython”,并将为 Jython 返回“Jython”。显然,这个不向后兼容低于 2.6,但将向前兼容。

        【讨论】:

          【解决方案4】:

          您将拥有适用于每个不同环境的唯一 settings.py。

          您的开发 settings.py 不应是您的 QA/Test 或生产 settings.py。

          我们做的是这个。

          我们有一个“主”settings.py,其中包含已安装的应用程序和其他变化不大的项目。

          我们有特定于环境的文件,其名称类似于 settings_dev_win32.pysettings_qa_linux2.py 和 'settings_co_linux2.py`等

          这些特定于环境的设置中的每一个都导入“主”设置,然后覆盖数据库驱动程序之类的设置。由于每个设置文件对于环境都是唯一的,因此没有 if 语句,也无法检测我们在哪个环境中运行。

          生产(在 Apache 中,使用 mod_wsgi 和 mysql)使用 settings_prod_linux2.py 文件而不是其他文件。

          开发(在 Windows 中使用 sqlite)使用 settings_dev_win32.py 文件。

          【讨论】:

            【解决方案5】:

            如果您正在运行 Jython

            import platform
            platform.system()  
            

            返回“Java”
            here has some discussion,希望对您有所帮助。

            【讨论】:

            • 该链接已失效,并且该调用不是正确的。 python_implementation 是正确的。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-22
            • 1970-01-01
            • 1970-01-01
            • 2011-01-15
            • 2020-07-18
            • 2017-03-12
            相关资源
            最近更新 更多