【问题标题】:Which Python should I install (and how) when using msys2?使用 msys2 时我应该安装哪个 Python(以及如何安装)?
【发布时间】:2017-01-30 09:22:52
【问题描述】:

虽然当前官方 Python 版本是 3.6,但 msys2 为 python3 提供了两个包:

那么我应该在何时以及如何使用哪个版本?我不能只使用 Windows 3.6 并以某种方式告诉pacman 使用它吗?或者我可以在 msys/mingw 版本中运行 3.6 并在 Windows 中使用它,这样我就不需要安装两个/三个?

【问题讨论】:

  • 不可以,major (3) 和minor (6) 版本必须相同,因为它们链接了python源代码。您的选择是使用较早版本的 python,等待模块的新版本,或者自己编译。
  • msys/python3 的行为类似于 Linux 上的 Python(带有一些补丁),mingw64/mingw-w64-x86_64-python3 类似于 Windows 上的 Python。由于需要更新/返工的补丁数量,它有点过时了。在没有 MSYS2 特定补丁的情况下使用适用于 Windows 的 Python 可能会导致不可忽视的错误。
  • @mati865 我读了更多——msys/python 和 mingw/native python 之间的唯一区别不应该是对 cygwin 样式路径的支持吗?或者 mingw-version 除了原生版本还提供什么?我唯一希望的就是更好的编译支持,但是例如pip install numpy 也失败了,但由于缺少 python35.dll。我将不得不更深入地挖掘......
  • @Tobias Kienzler 你明白了吗? msys/python3 在编译包时更容易使用吗?不需要 msvc++。 ?
  • @Mithril 不幸的是,没有进展也没有时间测试...如果您发现了什么,请添加答案。否则你试试赏金......

标签: python mingw msys2


【解决方案1】:

这是我在 msys2 上用来安装 python3 的:

$ pacman -Syuu

关闭并重新启动 msys2。

$ pacman -S mingw-w64-x86_64-python3-bsddb3 mingw-w64-x86_64-gexiv2 mingw-w64-x86_64-ghostscript mingw-w64-x86_64-python3-cairo mingw-w64-x86_64-python3-gobject mingw-w64-x86_64-python3-icu mingw-w64-x86_64-iso-codes mingw-w64-x86_64-hunspell mingw-w64-x86_64-hunspell-en mingw-w64-x86_64-enchant

要处理此错误“没有 intltool 或版本

$ pacman -S intltool

将这些添加到测试中:

$ pacman -S mingw-w64-x86_64-python3-lxml
$ pacman -S mingw-w64-x86_64-python3-jsonschema

执行此命令以验证 python3 是否正确安装:

$ python3 --version
Python 3.6.4

详情请见https://www.gramps-project.org/wiki/index.php?title=Gramps_for_Windows_with_MSYS2

【讨论】:

  • 我已经安装了 Python3(同时它已分别更新到 3.6.5 (mingw64) 和 3.6.2 (msys2))所以恐怕你误解了我的问题 - 我想知道哪个在我目前拥有的这三个 Python(原生 windows、mingw64、msys2)中,我应该何时使用以及为什么使用,以及由于冗余,我是否至少可以摆脱其中一个。
  • 顺便说一句,很好的链接到gramps,听起来值得独立检查
  • 好吧,我对msys/python3了解不多,但是看起来mingw-w64-x86_64-python3已经成功用gramps项目了。
  • 为 msys2 将 /usr/bin 链接到 /mingw64/bin 是否安全?经过更新后,我发现 Python3 的安装位置
【解决方案2】:

为什么有两个版本的 Python,但都服务于不同的用例,这可能会让人感到困惑:

  1. MINGW - Windows 原生应用程序
  2. MSYS2 - 模拟 POSIX 应用程序以在 Windows 中工作

MINGW 是指使用 MINGW GCC 编译器编译并以 Win32 API 为目标的可执行文件。 MSYS2 是指由 MSYS2 GCC 编译器编译并使用 POSIX 仿真层的可执行文件。

作为用户,我理解这可能会让人感到困惑,您为什么要关心 Python 是针对哪个编译器和 API 编译的?您可能想要使用的一些程序依赖于在 POSIX 环境中运行。将这些应用程序移植到 Windows 将非常困难且耗时。在这些情况下,MSYS2 提供了一个仿真层来允许这些应用程序工作。不幸的是,使用这个仿真层非常慢。

所以一般来说,如果你可以使用 Python 的 MINGW 版本,你应该使用它,因为它会快得多。但是,如果您尝试运行依赖于 POSIX 环境的 Python 应用程序,则 MSYS2 提供了一个模拟层来帮助使其工作。

如需更多信息,Git for Windows Wiki 提供了更详细的说明。

【讨论】:

    【解决方案3】:

    这可能有点晚了,但我在 MSYS2 中使用原生 Windows 安装的 python。我这样做的方式是确保 Python 添加了环境变量。在此之后,我创建了一个新的 Windows 环境变量PYTHONPATH=C:\Users\Glen.Nicholls\AppData\Local\Programs\Python\Python37\Lib\site-packages。我还将 MSYS 设置为继承 MINGW64.ini。现在,我将 pippython 的别名添加到我的 .bashrc 中:

    alias python='$PYTHONPATH/../../python.exe'
    alias pip='$PYTHONPATH/../../Scripts/pip.exe'
    

    这不是最干净的解决方案,但它在我的环境中运行良好。另外,请记住,如果您运行 which python,它不会指向正确的安装。

    另一种不创建别名和上述所有方法的方法是更改​​您的 PATH 以在 msys PATH 之前包含继承的 Windows PATH。您可以手动编辑它,也可以在 .bash_profile 或 .bashrc 中添加一些花哨的内容。

    【讨论】: