前言


  • 現在的 git for windows 已經改用 MSYS2 當作執行環境的基礎了. 如果需要自己重新編譯 git for windows 的話, 也有 git for windows SDK 可用, 不再需自己重新由 MSYS2, GCC, git... 一路安裝設定, 接著還要下載原始程式, 上 patch, 才能開始編譯 git. 我以前自己試著作過一次, 結果是一關接著一關的卡, 卡關卡得非常嚴重... 不只是挑戰你對 unix/linux 環境及指令的了解, 更要具備對 GNU cygwin 開發環境的知識. 總之就是沒有神人帶你走過一遍真的很難順利把建置的環境弄好.
  • 日前想為 git for windows 加裝個python, 可是一直找不到直接給 MSYS2 用的, 只找到獨立安裝的 python for windows. 雖然一樣可以在 git for windows 的bash視窗中使用, 但是 git for windows SDK 裡明明就有python可用啊! 於是想到何不想辦法自行安裝這個版本的python呢? 但是問題來了 git for windows 內部沒有附pacman指令, 沒辦法像 git for windows SDK 或者是 MSYS2 那樣直接用pacman安裝. 於是再一次的找 Google 大神幫忙, 找到了 StackOverflow 這一篇 很快的就把它搞定了.

其實最重要的是裝了pacman之後呢, 發現有缺什麼工具或指令就可以直接安裝 MSYS2 的版本, 不必像以前那樣一定得找 Windows 原生的替代程式, 或是 GnuW32 的版本, 或是 Cygwin 的版本了.

Step 1: 安裝 pacman


  1. pacman的安裝檔我們可以從 MSYS2 的版本資料庫中下載到: 網站裡面有各個指令的 (多個版本的) .tar.xz壓縮的 tarball 安裝檔. 我們只要下載最新版的pacman就可以了.
    我自己下載了 pacman-5.1.2-1-x86_64.pkg.tar.xz 這個版本.
  2. 接著我們要把這個 tarball 解開到根目錄裡. (小心! 這些 tarball 都是用相對路徑的)
    tar xvf pacman-5.1.2-1-x86_64.pkg.tar.xz -C /
    
    或者是
    tar xvf pacman-5.1.2-1-x86_64.pkg.tar.xz --directory /
    
    或者是
    cd /
    tar xvf pacman-5.1.2-1-x86_64.pkg.tar.xz
    
    完成之後你的 msys2 根目錄 (即 git for windows 的安裝目錄) 裡會多三個 linux 的隱藏檔, 請將它們刪除
    • .BUILDINFO
    • .MTREE
    • .PKGINFO
    其實也可以解開壓縮檔時就把它們排除
    tar xvf pacman-5.1.2-1-x86_64.pkg.tar.xz -C / --exclude .PKGINFO --exclude .MTREE --exclude .BUILDINFO
    
  3. 再來我們需要 git for windows SDK 裡的二個目錄(註一). 這二個目錄一個是pacman的設定, 一個是pacman在不同執行環境用的 keyrings.
    • /etc/pacman.d
    • /usr/share/pacman/keyrings
  4. 重建 keyrings, 並由/usr/share/pacman/keyrings重新載入預設的 key
  5. pacman-key --init
    pacman-key --populate msys2
    
  6. 更新 keyrings (如果確定已經是最新版的 key 了, 可以不用執行)
  7. pacman-key --refresh-keys
    
  8. 強制更新 msys (這一步不能省, 否則 pacman 無法正確動作)
  9. pacman -Syu --force
    
pacman00

pacman-key --initpacman-key --populate msys2的執行結果

pacman01

pacman -Syu --force的執行結果

接著我們就可以安裝我們需要的套件軟體了.

註一: 我把目前的版本放在這個下載連結, 下載後請你一樣用tar xvf your_file_name -C /解開到根目錄裡.

Step 2: 安裝套件


這裡我們有二件事需要特別注意:

  1. git for windows 64 位元用的 package 有部份是有前置這個字串mingw-w64-x86_64-的版本(註二), 因此有些 package 一共會有二種版本 (一般 msys2 的版本, 前置mingw-w64-x86_64-mingw-w64-i686-的版本). 所以像是 AI 常用的python套件, 在 git for windows 64 位元版上就有基本 msys2 的版本python, python3-pip, python2. 也有mingw-w64-x86_64-的版本: mingw-w64-x86_64-python3, mingw-w64-x86_64-python3-pip, mingw-w64-x86_64-python2. 到底應該用哪一個版本, 基本上應該是先以沒有mingw-w64-x86_64-的版本為優先 (這個版本一般相容性比較好). mingw-w64-x86_64-的版本通常會和 windows 的某些功能結合得比較好, 但是很可能會出現一些相依套件的相容性問題, 所以我們得自行斟酌小心使用.
  2. 由於packman是我們自行補裝上去的, 所以我們並沒有原先 git for windows 已經裝好的套件的 packman 版本資訊資料庫, 所以安裝套件時用的packman -Sy指令要改成packman -Sdd(註三)才能順利安裝成功. 例如: 安裝python要用下列指令
    pacman -Sdd python
    
    而不是原先的
    pacman -Sy python
    

註二: git for windows 32 位元用的 package 則有部份是前置這個字串mingw-w64-i686-.

註三: 參數-Sdd是安裝套件時強制不檢查相依性, 所以可能會有缺漏一些套件, 或者有時某些套件必需昇級才行.
另一個方法是用packman -Sd xxx_package來安裝xxx_package, 出現錯誤時再附加上--assume-installed yyy_package --assume-installed zzz_package如果出錯的是yyy_package, zzz_package. 有些 package 的相依性非常多時指令就會變得非常的長, 需要一點耐心.

完整安裝 python (python3, python2, pip)


目前 msys2 的python安裝的已經是python3, 所以要完整安裝python3, python2pip請使用下列指令:

pacman -Sdd python
pacman -Sdd python3-pip
pacman -Sdd python2

安裝完成之後, 如果要更新pip

pip install --upgrade pip

這樣python常用的pip指令也一併可以正常使用了.

目前 (2019/01/10) 這個方法還有一問題: 無法成功安裝 PyInstaller. 有看到 github 上有人提問了, 等 patch 完全併入主版後再告訴大家.

安裝套件範例: bison, flex


除了上面python的例子, 這裡我們舉個沒有mingw-w64-x86_64-套件的例子: binsonflex. 一般開發語彙分析或語法分析功能的程式 (例如: script language) 都會用到binsonflex這二個套件. 這二個套件也剛好有點冷門, 所以目前在 MSYS2 的環境裡是找不到mingw-w64-x86_64-binsonmingw-w64-x86_64-flex, 就是只有binsonflex這二個, 不過有這二個就足夠了. (我以前安裝的是 GnuWin32 版本, 版本非常的舊而且看起來好像沒人在維護了, 整個就是一個老掉牙).

下圖3. 上半部顯示一共需要安裝 8 個套件, 你可以直接用pacman -Sdd bison flex來安裝他們. 不過這裡我用了另外一種方法, 所以如圖3. 下半部和圖4. 所示我用pacman -Sy bison flex安裝他們, 而且也只安裝了這二個而已, 其他的 6 個套件就直接不見了.

其實這是因為我很確定安裝binsonflex額外需要的這 6 個程式庫剛好 git for windows 裡都已經安裝. 同時我手上也剛好有 git for windows SDK, 於是我就把他們的 packman 版本資訊資料庫從 git for windows SDK 裡直接拷貝過來. 拷貝過來之後再執行一次pacman -Sy bison flex, 你就會看到和我貼的一樣的畫面. 這樣在安裝相依套件非常多的套件時, 就會容易一些. 但是缺點是得先裝一次 git for windows SDK.

另外, packman 版本資訊資料庫的位置是在/var/lib/pacman/local, 一個套件一個子目錄, 我們只要拷貝需要的部份即可, 不必也不可以全部都拷貝過來.

bison_flex01

bisonflex安裝過程-1

bison_flex02

bisonflex安裝過程-2

MSYS2 疑難雜症


請參考這一篇貼文.

MagicJackTing 發表在 痞客邦 留言(0) 人氣()