[python]安裝 libgit2, pygit2 on windows 失敗過程

  • 12801
  • 0
  • 2013-05-31

[python]安裝 libgit2, pygit2 on windows

總之,我的程式還是要在 windows 下跑,該弄懂的還是要弄懂。

因為 pygit2 是依附在 libgit2 之上,因此,

第一個要解決的就是 libgit2 要裝在 windows 的問題。

還好!

有人好心的教大家如何在 windows 安裝 libgit2!

https://github.com/libgit2/libgit2/wiki/Building-libgit2-on-Windows

首先,下載並安裝以下程式

  1. Microsoft Visual Studio 2010 express,請選 VC++ Express,網址 http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
  2. CMake,安裝 x86 exe 最簡單,網址 http://www.cmake.org/cmake/resources/software.html
  3. 安裝 Python,網址 http://www.python.org/getit/
  4. 下載 libgit2 的 source code,我是在 c:\libgit2\git 執行底下的指令,接下來好講解。

git clone https://github.com/libgit2/libgit2.git

如果沒有裝 git,就裝 tortoisegit 吧!

以上四個東西都有了,接下來就開工了!

  1. 打開 VS2010 Command Prompt
  2. 到 libgit2 的 source code 位置,照剛剛的指令,會放在 C:\libgit2\git\libgit2

      cd C:\libgit2\git\libgit2

  3. 輸入以下指令

      mkdir build && cd build
      cmake ..
      cmake --build .
      ctest -V
      cmake --build . --target install

最後,libgit2 會裝在 Installing: C:/Program Files (x86)/libgit2

 

接下來,安裝 pygit2,把 source code 放在 C:\pygit2\git\pygit2

接下來設定以下的環境變數

set VS90COMNTOOLS=%VS100COMNTOOLS%

以上,是避免 error: Unable to find vcvarsall.bat

C:\pygit2\git\pygit2>setup.py install
running install
running build
running build_py
running build_ext
building '_pygit2' extension
error: Unable to find vcvarsall.bat

 

然後,接下來是難過的消息,就是安裝不上去,會得到

在執行 C:\pygit2\git\pygit2>setup.py install
都得到:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.exe /c /nologo /Ox
/MD /W3 /GS- /DNDEBUG "-IC:\Program Files (x86)\libgit2\include" -Iinclude -IC:
\Python27\include -IC:\Python27\PC /Tcsrc\pygit2.c /Fobuild\temp.win32-2.7\Relea
se\src\pygit2.obj
pygit2.c
src\pygit2.c(146) : error C2275: 'git_clone_options' : 將此型別當做運算式的使用
方式不合法
        c:\program files (x86)\libgit2\include\git2/clone.h(82) : 請參閱 'git_cl
one_options' 的宣告
src\pygit2.c(146) : error C2146: 語法錯誤 : 遺漏 ';' (在識別項 'opts' 之前)
src\pygit2.c(146) : error C2065: 'opts' : 未宣告的識別項
src\pygit2.c(146) : error C2059: 語法錯誤 : '{'
src\pygit2.c(156) : error C2065: 'opts' : 未宣告的識別項
src\pygit2.c(156) : warning C4133: '函式' : 不相容的型別 - 從 'int *' 至 'const
git_clone_options *'
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.e
xe"' failed with exit status 2

 

我試過 libgit2 官網的方法,也試過 ahem 先生 在  https://github.com/libgit2/pygit2/issues/110 提過的方法,

mkdir build && cd build
cmake .. -DSTDCALL=OFF -G "Visual Studio 10"
cmake --build . --config release
ctest -V
cmake --build . --config release --target install

都一樣的結果。

 

註一:原來 ahem 先生的方法如下:

mkdir build && cd build
cmake .. -DSTDCALL=OFF -G "Visual Studio 10 Win64"
cmake --build . --config release
ctest -V
cmake --build . --config release --target install

只是我的環境不能加上 Win64。

C:\libgit2\git\libgit2\build>cmake .. -DSTDCALL=OFF -G "Visual Studio 10 Win64"
CMake Error at CMakeLists.txt:14 (PROJECT):
  Cannot enable 64-bit tools with Visual Studio 2010 Express.

  Install the Microsoft Windows SDK v7.1 to get 64-bit tools:

http://msdn.microsoft.com/en-us/windows/bb980924.aspx

-- Configuring incomplete, errors occurred!

 

後來不死心,繼續研究 C2275 是什麼原因。找了很久,有人說也許是微軟編譯器,看到 .c 就只用 C89 來處理,也就是變數宣告,一定要在 block 的一開頭,所以,我就把 src/pygit2.c 裡的 146 行,變數宣告搬到前面,初始化也處理一下。

int err;
git_clone_options opts;

if (!PyArg_ParseTuple(args, "zzIzzzzz",
            &url, &path, &bare, &remote_name, &push_url,
            &fetch_spec, &push_spec, &checkout_branch))
    return NULL;

opts.version = 1;
opts.bare = bare;
opts.remote_name=remote_name;
opts.pushurl=push_url;
opts.fetch_spec=fetch_spec;
opts.push_spec=push_spec;
opts.checkout_branch=checkout_branch;

後來的確 pygit2.c 可以過了,那接下來又換 repository.c 有相同問題,那也一起處理。結果!

   正在建立程式庫 build\temp.win32-2.7\Release\src\_pygit2.lib 和物件 build\temp
.win32-2.7\Release\src\_pygit2.exp
remote.obj : error LNK2019: 無法解析的外部符號 _git_remote_fetchspec 在函式 _Rem
ote_fetchspec__get__ 中被參考
remote.obj : error LNK2019: 無法解析的外部符號 _git_remote_set_fetchspec 在函式
_Remote_fetchspec__set__ 中被參考
build\lib.win32-2.7\_pygit2.pyd : fatal error LNK1120: 2 個無法解析的外部符號
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\link
.exe"' failed with exit status 1120

中地雷又一枚…。

 

 

 

分享