Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定python是mingw还是正式构建?_Python_Windows_Gcc_Mingw_Msys2 - Fatal编程技术网

如何确定python是mingw还是正式构建?

如何确定python是mingw还是正式构建?,python,windows,gcc,mingw,msys2,Python,Windows,Gcc,Mingw,Msys2,我正在MSYS2环境中使用python。MSYS2有自己的内置MINGW python版本。我还可以从www.python.org安装官方python 问题是:如果我想编写python代码,需要知道python版本是MINGW还是官方版本,我该怎么做 以下是一些我可以想象的方法 使用“sys.prefix”对象。它告诉安装目录。MSYS2通常安装在X:\MSYS2\..目录中。。。。而官方版本默认安装在X:\Python27\中。但是用户可以更改安装目录。所以这不是一个好办法 使用“sys.ve

我正在MSYS2环境中使用python。MSYS2有自己的内置MINGW python版本。我还可以从www.python.org安装官方python

问题是:如果我想编写python代码,需要知道python版本是MINGW还是官方版本,我该怎么做

以下是一些我可以想象的方法

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

  • 有什么更优雅的方法可以做到这一点吗?

    sys.platform
    在msys Python中提供
    msys

    Mingw python3构建补丁官方
    sysconfig.get_platform()
    函数,因此它返回“Mingw”,并可用于区分官方Python构建


    另一个选项是检查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)]
    

    据我所知,您列出的两种方法是了解python版本的两种合理方法。但我很好奇,用户使用哪个版本对您有什么影响?它们都将为相同的版本号提供相同的用户体验。顺便说一下,您可以检查环境变量MSSYSTEM:如果它存在,通常意味着您正在MSYS2外壳中运行。但我不知道您是否关心支持从MSYS2 shell运行官方Python解释器的用户。Hi@marcus,cffi不支持MINGW版本。我想看看是否有更可靠的方法让程序检测到它,然后再使用其他函数。@DavidGrayson:我确实需要从MSYS2I运行它。我建议您实际检查是否支持cffi。使用
    try…except
    子句检查导入是否有效,并引发适当的错误。MinGW Python不是MSYS Python。在MSYS2上,一个在
    /usr
    中,另一个在
    /mingw{32,64}
    中。