TopUser 发表于 2023-3-14 23:22

在Windows上使用MSYS2把Python、C/C++、Git环境安装在一起

# 说明

新人新帖,多有疏漏,主要帮助有需要帮助的小白,大佬轻喷。如有错误,也请广大网友指正,谢谢。

# 问题再现

作为大学生学习的编程语言比较杂,早期学习C/C++,后面又要求学习Python,然后自己在项目中还会使用到Git。如果你只是想要一个能够运行HelloWorld的C语言环境还是选择一个一个的安装环境的,这三个也没啥重叠的部分,但是如果你要是想要有新版的C/C++环境并配上GDB调试器的话,你就会发现GDB调试器会依赖Python环境。同时为了方便对于这些环境的更新升级的话,使用MSYS2来安装是更加方便的。那么Git for Windows环境又和MSYS2环境重叠了。所以我就不想这样重叠的安装环境!我要做的就是将这几个东西安装在一起,同时使用MSYS2将他们管理起来。

# 安装步骤

其实安装C/C++环境和Python环境还算简单,这里主要说一下Git环境。其他步骤一笔带过。

1. 安装MSYS2

   这个官网找个安装包下载下来安装就好了,应该没啥问题吧。附一个[官网链接](https://www.msys2.org/)。

2. 为什么选择MSYS2中的MINGW64环境中安装C++、GDB、Python?(**先不要安装这些环境**)

   MSYSY2中提供了MSYS、MINGW64、CLANG等环境,虽然说MSYS环境中应该是能安装C++/Git/Python环境的,但是它的bin路径下有太多我们不想用的命令行工具了,如果我把这个路径加入Windows的Path环境变量那简直就是灾难。所以我选择的环境是MINGW64。

3. 安装Git环境

   对于步骤二中提到的环境是非常容易安装的,其实需要稍微花点心思安装的是Git环境。因为在MSYS2中并没有提供官网的MINGW64环境下Git安装包。在我查阅了官网的安装指南和自己的实际试错之后,得到了这份安装方法:

   1. 配置在MSYS2中的Git仓库

      ```bash
      # 配置pacman.conf文件
      sed -i '/^\/{ s|^|\nServer = https://wingit.blob.core.windows.net/x86-64\n\n\nServer = https://wingit.blob.core.windows.net/i686\n\n|; }' /etc/pacman.conf
      # 配置证书
      rm -r /etc/pacman.d/gnupg/
      pacman-key --init
      pacman-key --populate msys2
      curl -L https://ghproxy.com/https://raw.githubusercontent.com/git-for-windows/build-extra/HEAD/git-for-windows-keyring/git-for-windows.gpg |
      pacman-key --add - &&
      pacman-key --lsign-key E8325679DFFF09668AD8D7B67115A57376871B1C &&
      pacman-key --lsign-key 3B6D86A1BA7701CD0F23AED888138B9E1A9F3986
      ```

      以上代码都是官方文档提供的,大致作用就是为你的MSYS2添加Git仓库并安装对应的证书。证书文件地址就是这个链接`https://raw.githubusercontent.com/git-for-windows/build-extra/HEAD/git-for-windows-keyring/git-for-windows.gpg`。但是这个链接因为是Github的链接,由于懂得都懂的原因,它不能直接访问,所以我这里使用了国内搭建的Github文件代{过}{滤}理下载服务。官网就是上面代码中的`https://ghproxy.com/`,也算是给下载GitHub文件比较慢的小伙伴安利一个工具吧。上面的代码运行结束后可能出线报错之类的,出现了的话可以尝试多运行几次看看能不能解决,如果还是不能解决,那我也不知道了。~~我TM直接摆烂~~

   2. 更新仓库

      刚刚只是添加完仓库,并没有更新,所以我们需要输入`pacman -Syu`命令更新仓库,同时他会提示你哪些依赖可以更新,你主要按照他说的都更新就好了。但是可能只执行一次并不能将所有依赖都更新到最新版本,所以你要多次执行直到提示你已经全部更新到最新版本。

      下面是当你输入命令后有依赖需要更新会出现的输出

      ```
      $ pacman -Syu
      :: Synchronizing package databases...
       clangarm64                     1129.2 KiB   234 KiB/s 00:05 [###############################] 100%
       git-for-windows                  54.2 KiB23.2 KiB/s 00:02 [###############################] 100%
       git-for-windows-mingw32          17.9 KiB7.88 KiB/s 00:02 [###############################] 100%
       mingw32                        1747.2 KiB   310 KiB/s 00:06 [###############################] 100%
       mingw64                        1826.8 KiB   614 KiB/s 00:03 [###############################] 100%
       ucrt64                         1870.9 KiB1915 KiB/s 00:01 [###############################] 100%
       clang32                        1725.1 KiB2.42 MiB/s 00:01 [###############################] 100%
       clang64                        1813.9 KiB1468 KiB/s 00:01 [###############################] 100%
       msys                            446.0 KiB   354 KiB/s 00:01 [###############################] 100%
      :: Starting core system upgrade...
       there is nothing to do
      :: Starting full system upgrade...
      warning: mingw-w64-x86_64-openssl: local (3.0.8-1) is newer than git-for-windows (1.1.1.t-1)
      resolving dependencies...
      looking for conflicting packages...
      
      Packages (2) mingw-w64-x86_64-git-2.40.0.1.1d90ca2906-1mingw-w64-x86_64-p11-kit-0.24.1-5
      
      Total Download Size:    9.82 MiB
      Total Installed Size:50.25 MiB
      Net Upgrade Size:      -0.02 MiB
      
      :: Proceed with installation?
      ```

      下面是你更新完所有库会看到的输出

      ```
      $ pacman -Syu
      :: Synchronizing package databases...
       clangarm64 is up to date
       git-for-windows is up to date
       git-for-windows-mingw32 is up to date
       mingw32 is up to date
       mingw64 is up to date
       ucrt64 is up to date
       clang32 is up to date
       clang64 is up to date
       msys is up to date
      :: Starting core system upgrade...
       there is nothing to do
      :: Starting full system upgrade...
      warning: mingw-w64-x86_64-openssl: local (3.0.8-1) is newer than git-for-windows (1.1.1.t-1)
       there is nothing to do
      ```

   3. 回退环境版本

      更新完所有依赖后,你应该会看到一堆警告,类似于这样:`warning: xxxxxxxxxxxx: xxxxxxxx is newer than xxxxxxxxx`。这是因为我们的Git需要的环境比较旧。这个时候根据木桶效应,我们就需要将它提示的依赖全部重新安装一遍,对应命令为:

      ```bash
      pacman -S {xxx1,xxx2,xxx3,xxx4}
      ```

      其中xxx1,xxx2,xxx3就是你终端对应给出警告的哪些依赖。安装完后你需要执行`pacman -Syu`来查看是否还有警告。当你消除所有警告之后,恭喜你,胜利就在眼前了。

   4. 安装新版的openssl依赖

      按道理来说,更新完所以依赖之后是没问题才对,但是根据我的时间并不是这样,使用它提供的`openssl`依赖并不能让Python的pip正常运行。所以我们需要为MSYS2手动安装到最新版本,所以我们需要下载这个以来的离线安装包,这里我给出官网[下载地址](https://packages.msys2.org/package/mingw-w64-x86_64-openssl?repo=mingw64)。下载完后,使用如下命令安装该依赖。

      ```bash
      pacman -U /xxx/xxx/mingw-w64-x86_64-openssl-3.0.8-1-any.pkg.tar.zst
      ```

      其中/xxx/xxx是你的依赖离线包下载的位置,不过我更建议你在输入完`pacman -U `之后将你的文件拖进终端,这样就他就可以为你自动填好路径了,毕竟**在MSYS2中的路径表达方式和Windows有一点不一样**。

   5. 安装Git本体

      终于到了最后一步,安装Git了。这最后一步还是非常简单的。直接输入`pacman -S mingw-w64-x86_64-git`等待它安装就好了。按照我的经历,这个在安装的时候会最后抱一个小错,但是是丝毫不影响使用的,所以直接无视就好。

4. 安装C/C++、GDB、Python环境

   直接贴命令啦,我觉得应该都没啥注意点了,主要就是前面的Git。

   ```bash
   pacman -S {mingw-w64-x86_64-gcc,mingw-w64-x86_64-gdb,mingw-w64-x86_64-python-pip}
   ```

888888c 发表于 2023-3-15 00:44

观摩一下 ,虽然我看不懂 小白一个

Zeusky 发表于 2023-3-15 01:26

不错,学到了

wangL0 发表于 2023-3-15 02:21

好东西,学习了

lsy0202 发表于 2023-3-15 05:30

学习一下,谢谢分享

sdllg 发表于 2023-3-15 07:20

学习了,谢谢分享

lnshijia 发表于 2023-3-15 08:01

这样挺方便的

TenSir152 发表于 2023-3-15 08:44

这是真的强啊,学习

aa2923821a 发表于 2023-3-15 08:52

感谢感谢我先观摩观摩

deqian0313 发表于 2023-3-15 09:32

目前正在学Python,确实强大,不过主要还是协助我做分析。
页: [1] 2 3
查看完整版本: 在Windows上使用MSYS2把Python、C/C++、Git环境安装在一起