ghc-pkg check
會列出損壞的軟件包,以及它們爲什麼被破壞,這是相當不錯的。但據我所知,沒有自動化的方式來照顧那些破損的包裹。處理破損包裹的建議方法是什麼? (最好不要重新安裝GHC)ghc-pkg檢查記錄的修復問題
回答
希望你有足夠的智慧來打破你的全局包數據庫。破損很容易意味着重新安裝GHC是必要的。因此,讓我們假設破壞僅限於用戶軟件包數據庫(用戶軟件包映射的全局數據包中可能包含一個或兩個軟件包除外)。如果只有幾包被打破,你可以通過註銷違規包解決您的設置,
$ ghc-pkg unregister --user borken
會經常抱怨註銷博肯會破壞其他軟件包。無論您試圖立即取消註冊那些還是立即註銷borken並應對新破壞大多是一種選擇。 確保您只從用戶數據庫取消註冊數據包。如果事情不是太嚴峻,在註銷一些軟件包之後,ghc-pkg check
將報告沒有更多的破損軟件包。
另一方面,如果很大一部分軟件包損壞,則可能會更容易完全擦除用戶db,$ rm -rf ~/.ghc/ghc-version/package.conf.d
或其他操作系統上的等效軟件。
無論哪種方式,你都會丟失你仍然想使用的軟件包,所以你會嘗試重新安裝它們而不用重新打破任何東西。運行
$ cabal install world --dry-run
將嘗試爲您使用cabal-install
安裝的所有軟件包生成一致的安裝計劃。如果它沒有這樣做,它會打印出原因,然後你可以通過向世界文件(~/.cabal/world
)中列出的包添加約束來解決問題 - 例如,儘管我沒有破包(根據ghc/ghc-pkg),cabal install world --dry-run
告訴我它不能配置vector-algorithms-0.5.2
,這取決於vector >= 0.6 && < 0.8
(我已安裝vector-0.7.1
)。原因是hmatrix-0.12.0.1
要求vector >= 0.8
。在世界文件中將hmatrix上的-any
「約束」替換爲「< 0.12」產生了一個乾淨的安裝計劃。
因此,在世界文件中有一些約束條件之後,你會從cabal得到一個安裝計劃。檢查是否會重新安裝已有的軟件包(安裝較新的版本可能不錯,重新安裝相同的版本意味着麻煩)。如果您對cabal的安裝計劃cabal install world
感到滿意,並且在GHC忙時沏出一壺好茶。再次運行ghc-pkg check
,驗證一切正常。
一個普遍好的建議:如果你不知道安裝軟件包需要什麼,總是首先使用--dry-run。
如果您通過使用cabal進行全局安裝來破壞您的全局包數據庫,那麼註銷違規者的策略可能會奏效,但它也可能會不可逆轉地破壞您的ghc,這取決於哪種方式被破壞。如果你通過從你的操作系統發行版安裝軟件包來破壞你的全局數據庫,那麼安裝一個新的GHC,詛咒發行版打包者,並試圖幫助他們防止進一步發生這樣的事件。
A cabal repair
命令將是非常好的,但目前,修復損壞的設置不幸的是更多的工作。
有一段時間我依靠這個ghc-pkg-clean script。它刪除所有破損的包,並根據需要重新安裝它們。對於更嚴重的破損,我使用ghc-pkg-reset script。
但是,今天我發現了ghc-pkg-autofix,它使得這個進一步自動化 - 破碎的軟件包變得不間斷。我不知道它是什麼,YMMV。
通過描述和對源代碼的簡要介紹,'ghc-pkg-autofix'重寫了'〜/ .ghc /.../ package.conf.d/package'中的依賴信息。這是一項危險的操作,可能會以陰險的方式破壞事物,但它在哪裏運作,速度很快。正如該描述所說的那樣,_使用風險自負。你的腳本看起來更安全。但是如果你和我一樣,並且安裝了多個GHC,那麼ghc-pkg-clean只處理鏈接到ghc的腳本(容易修改腳本以接受使用ghc-pkg的參數)和ghc-pkg-reset會把它們全部燒掉。所以,不適合我,但我很奇怪。 +1用於自動幫助。 –
- 1. Oracle查詢重複的記錄問題
- 2. 檢查重複的記錄
- 3. SqlLite檢查重複記錄
- 4. 檢查重複記錄
- 5. 檢查修改問題
- 6. 檢索記錄問題
- 7. 修復問題
- 8. 問題檢查複選框
- 9. MySQL - 修復多條記錄
- 10. 快速SQL檢查複式記錄
- 11. 檢查多個重複記錄
- 12. 插入新記錄時檢查重複
- 13. 檢查重複記錄,然後創建
- 14. 記錄客戶端歷史記錄的MySQL複製問題
- 15. SQL(查詢)上的重複列重複記錄檢查
- 16. 如何檢查git merge問題是否已修復?
- 17. Mongodb修復問題
- 18. ConcurrentModificationException修復問題
- 19. 檢查mySQL中是否存在記錄時的性能問題?
- 20. 媒體查詢修復問題
- 21. 記錄問題
- 22. 記錄問題
- 23. Microsoft Access - 重複記錄問題
- 24. LINQ到實體複製記錄問題
- 25. 如何在訪問中檢查重複記錄
- 26. 修復請教,記錄重複
- 27. 檢查所有複選框的問題
- 28. 用getch()重複鍵檢查的問題
- 29. 修復損壞的git歷史記錄
- 30. 問題從活動記錄查詢
這取決於你如何安裝你的軟件包...... – ivanm