緣起
在linux下,最早用的比較工具是vim,這是作為一個vimer的自尊(其實沒有關系吧)。終於有一天,在比較同一個項目的兩個版本的時候,比較了兩三個文件后,看着vim里面花花綠綠的顏色,實在是受不了了。而且比較的結果也讓人迷惑。兩邊明明是一樣的,卻顯示為不一樣。我決定另尋出路。
在git中,推薦的比較工具是meld,那就這個好了,也不管是不是因為是不是按照字母序排的。
一用之下,效果甚好。顏色整體偏淺,恰到好處。而且缺少,增加用一個插入的圖形化表示,很直觀形象,一看就明白了。還有比較文件夾的功能。實在是不能更好了。
windows
自然而然的想在windows下能不能跑meld。以前用的比較,一直是total command,但是用了meld之后,感覺再也回不去了。windows下也有比較工具,網上評價最高的是beyond compare。遺憾的是,是收費的。雖然網上有注冊碼,而且能用,但是總不如把meld裝在windows下舒服。上網一查,還真有在windows下的安裝包,把python和gtk整體打包了。
一安裝,運行meld.exe,沒反應。就知道,沒有那么便宜的事情。一條崎嶇的道路,才剛剛開始而已。
meld.exe只是一個啟動器而已,最后的任務是交給bin目錄下的meld,這是一個python腳本。同時還有一個meldc.exe是一個命令行的啟動器。為了看是出什么問題了,在bin目錄下啟動命令行,運行python meld。顯示是,import pygtk出錯,后面還有一句是無法找到相應的dll。
把這個卸載了,重新安裝meld,這次不安裝python和gtk,而用本來就有的python,並到網上下載gtk的all-in-one安裝包。然后在環境變量中添加PYTHON_HOME環境變量。再次運行meld,還是一樣的結果。
回過頭來,研究錯誤信息,不能import。於是我打開python,試了一下import pygtk,可以。這就奇怪了。無奈之下,只好修改源代碼,在import pygtk利用pdb加了斷點。一運行,發現是import gtk時候出錯。兩次import,出錯報的信息是一樣的。在解釋器下運行 import gtk,果然報錯。根據堆棧信息是在import _gtk時出錯。而_gtk是一個pyd文件。到這里卡住了。
繼續上網搜索。
這時候注意到了dll錯誤。一般導入失敗,不會有這個提示,應該是pyd中引用了一些dll,而找不到這些dll才會報錯。那怎么樣才能找到究竟是在哪一個環節上出錯了呢?
dependence walker
這個工具可以找到一個文件的dll依賴。我們在這個工具中打開_gtk.pyd。這時候,報錯,缺少了一些dll。一部分是gtk運行時庫的。一部分是一些很奇怪的東西:MSVCR90.DLL IESHIMS.DLL MOBSYNC.DLL WER.DLL。第一個是比較熟悉的,之前也都有遇到過,在電腦中也可以找到,其他幾個沒見過。但是,作為一個all-in-one的安裝包難道不應該把這些處理好嗎?只好自己上網找,然后扔進_gtk.pyd的目錄。然后扔一個進去,又出來一個依賴。如此重復四五次,總算是不報錯了。但是還是啟動不起來。果然,不能這樣子一個一個來的吧。
放棄
已經過去了4個小時了,meld不裝也可以的嘛。盜版就盜版了。進入清理階段。把meld卸掉,然后把pygtk卸掉。pygtk怎么卸?直接刪文件嗎?感覺散布到好多地方,刪不干凈啊。這連卸載也要這么麻煩嗎?
然后偶然的發現,重新運行安裝程序,會提示是修復還是移除(-_-!)。
ps:在寫文章的時候,不甘心,又跑去重試。不用all-in-one,手動一個一個安裝。結果更糟糕了。想想在linux下,一句sudo apt-get install 就搞定一切了。