【问题标题】:How to determine the python is mingw or official build?如何确定python是mingw还是官方构建的?
【发布时间】:2016-03-12 09:58:49
【问题描述】:

我在 MSYS2 环境中使用 python。 MSYS2 有自己构建的 MINGW python 版本。我也可以从 www.python.org 安装官方 python。

问题来了:如果我要写python代码需要知道python版本是MINGW还是官方版本,怎么办?

这里有一些我可以想象的方式。

  1. 使用“sys.prefix”对象。它告诉安装目录。 MSYS2 通常安装在目录 X:\msys2\.... 中,官方默认安装在 X:\Python27\ 中。但用户可以更改安装目录。所以这不是一个好方法。
  2. 使用“sys.version”对象可以获得带有编译器名称的版本字符串显示。它显示了由 GCC 编译的 MINGW python,由 MSC 编译的官方版本。但是可能有其他版本的python也是由GCC或MSC构建的。

有没有更优雅的方法可以做到这一点?

【问题讨论】:

  • 据我所知,您列出的两种方式是了解python版本的两种合理方式。但我很好奇,用户拥有哪个版本对您有什么影响?它们都将为相同的内部版本号提供相同的用户体验。
  • 顺便说一下,您可以检查环境变量 MSYSTEM:如果它存在,通常意味着您在 MSYS2 shell 中运行。但我不知道您是否关心支持从 MSYS2 shell 运行官方 Python 解释器的用户。
  • 嗨@mar​​cus,cffi 不支持MINGW 版本。我想看看是否有更强大的方法让程序检测它然后使用其他功能。
  • @DavidGrayson :我确实需要从 MSYS2 运行它
  • 我建议您实际检查是否支持 cffi。使用try...except 子句检查导入是否有效,并引发适当的错误。

标签: python windows gcc mingw msys2


【解决方案1】:

Mingw python3 build 修补了官方sysconfig.get_platform() 函数,因此它返回“mingw”,可用于与官方python build 区分开来。

https://github.com/Alexpux/MINGW-packages/blob/abd06ca92d876b9db05dd65f27d71c4ebe2673a9/mingw-w64-python2/0410-MINGW-build-extensions-with-GCC.patch#L54

【讨论】:

    【解决方案2】:

    另一个选项是检查 GCC 是否在 sys.version 中。

    例如:

    import sys
    MSYS2 = ("GCC" in sys.version)
    print(MSYS2)
    > True
    

    这是因为 sys.version 信息具有使用的编译器类型,而 MinGW 使用 GCC。

    python -c "import sys; print(sys.version)"
    3.7.4 (default, Aug 15 2019, 18:17:27)  [GCC 9.2.0 64 bit (AMD64)]
    

    【讨论】:

      【解决方案3】:

      sys.platform 在 msys-Python 中给出 msys

      【讨论】:

      • MinGW Python 不是 MSYS-Python。在 MSYS2 上,一个在 /usr,一个在 /mingw{32,64}
      猜你喜欢
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2017-05-10
      • 2016-07-01
      相关资源
      最近更新 更多