常見問題解答 (FAQ)

有相關術語的詞彙表嗎?

公式食譜書中有一份 Homebrew 術語 清單。

如何更新我的本機套件?

首先更新所有套件定義 (公式) 和 Homebrew 本身

brew update

現在,您可以使用下列指令列出已安裝套件 (keg) 中哪些已過時

brew outdated

使用下列指令升級所有內容

brew upgrade

或使用下列指令升級特定公式

brew upgrade <formula>

如何停止更新某些公式?

若要停止更新/升級某個項目

brew pin <formula>

若要允許該公式再次更新

brew unpin <formula>

請注意,其他公式所依賴的已釘選、過時公式需要在需要時升級,因為我們不允許公式針對過時版本建置。如果您不希望這樣,您可以改用 brew extract在 tap 中維護您自己的公式副本

如何解除安裝 Homebrew?

若要解除安裝 Homebrew,請執行 Homebrew/install 儲存庫中的解除安裝腳本

升級時如何保留舊版本的公式?

Homebrew 會自動解除安裝使用 brew upgrade 升級的每個套件公式的舊版本,並定期在每 30 天執行其他清理。

若要停用自動 brew cleanup

export HOMEBREW_NO_INSTALL_CLEANUP=1

若僅針對套件公式 foobar 停用自動 brew cleanup

export HOMEBREW_NO_CLEANUP_FORMULAE=foo,bar

當自動 brew cleanup 停用時,如果您解除安裝套件公式,它只會移除您已安裝的最新版本。它不會移除您過去可能已安裝的所有套件公式版本。當您執行 brew upgrade 時,Homebrew 將繼續嘗試安裝它所知道的最新版本。這可能會令人感到意外。

在這種情況下,若要完全移除套件公式,您可以執行 brew uninstall --force <formula>。請小心,因為這是一個破壞性操作。

為什麼 brew upgrade <formula>brew install <formula> 也會升級許多其他東西?

Homebrew 不支援任意混合和搭配套件公式版本,因此套件公式所依賴的一切,以及依賴於它的所有內容都需要升級到最新版本,因為那是我們測試的唯一套件公式組合。因此,任何給定的 upgradeinstall 命令都可以升級許多其他(看似不相關的)套件公式,特別是如果像 pythonopenssl 等重要項目也需要升級。

資料從哪裡下載?

brew --cache

通常是: ~/Library/Caches/Homebrew

我的 Mac .app 找不到 Homebrew 工具程式!

預設情況下,macOS 上的 GUI 應用程式在其 PATH 中沒有 Homebrew 的前置詞。如果您使用 Mountain Lion 或更新版本,您可以透過執行 sudo launchctl config user path "$(brew --prefix)/bin:${PATH}" 然後重新開機來修復此問題,如 man launchctl 中所述。請注意,這會設定 所有使用者launchctl PATH。對於較早版本的 macOS,請參閱 此頁面

如何為 Homebrew 貢獻心力?

閱讀我們的 貢獻指南

為什麼要編譯所有內容?

Homebrew 為許多套件公式提供預先建置的二進制套件。這些套件稱為 Bottles,可在 https://github.com/Homebrew/homebrew-core/packages 取得。

如果可用,預設情況下將使用已封裝的二進制檔案,但下列情況除外

我們的目標是瓶裝所有內容。

為什麼我應該將 Homebrew 安裝在預設位置?

Homebrew 的許多公式預先建置的二進位套件 (稱為 瓶子) 僅在您安裝在預設安裝前置詞時才能使用,否則它們必須從原始碼建置。從原始碼建置需要很長時間,容易失敗,且不受支援。預設前置詞為

請善待自己,並安裝到預設前置詞,以便您可以使用我們的預先建置二進位套件。請自行承擔選擇其他前置詞的風險!

為什麼在 Apple Silicon 上的預設安裝前綴是 /opt/homebrew

選擇前置詞 /opt/homebrew 是為了允許在 /opt/homebrew 中安裝 Apple Silicon 和 /usr/local 中安裝 Rosetta 2,並共存並使用瓶子。

為什麼在 Linux 上的預設安裝前綴是 /home/linuxbrew/.linuxbrew

選擇前置詞 /home/linuxbrew/.linuxbrew 是為了讓沒有管理員存取權限的使用者仍能透過 linuxbrew 角色帳戶受益於預先編譯的二進位檔。如果您自己沒有管理員權限,請考慮要求您的管理員人員為您建立一個 linuxbrew 角色帳戶,其主目錄為 /home/linuxbrew

為什麼 Homebrew 說 sudo 很糟糕?

tl;dr Sudo 很危險,而且您無論如何都已在沒有 sudo 的情況下安裝 TextMate.app。

Homebrew 拒絕使用 sudo 工作。

您應該只對您信任的工具使用 sudo。當然,您可以信任 Homebrew 😉 — 但您是否信任 Homebrew 執行的數百萬位元組 Makefile?開發人員通常比他們了解 make 語法更了解 C++。對此類檔案使用 sudo 的風險太高。它可能會修改 (或上傳) 您系統上的任何檔案。事實上,我們已經看到一些建置指令碼嘗試修改 /usr,即使前置詞被指定為其他內容。

我們使用 macOS 沙盒來阻止此行為,但當以 root 使用者身分執行時,此行為不會運作 (該使用者身分也幾乎可以讀取和寫入系統上的所有內容)。

您是否 chown root /Applications/TextMate.app?可能沒有。那麼 chown root wget 有那麼重要嗎?

如果您需要在多使用者環境中執行 Homebrew,請考慮建立一個專門用於 Homebrew 的獨立使用者帳戶。

為什麼沒有記載某個特定指令?

如果不在 man brew 中,它可能是 外部命令,其文件可以使用 --help 取得。

為什麼沒有合併我的 pull request?

如果已解決所有維護者回饋,且所有測試都通過,請加上「bump」註解來升級。有時我們會錯過要求,而且有許多要求。在此同時,請重新設定您的 pull request,以便更輕鬆地合併。

我可以自己編輯公式嗎?

是的!很簡單!如果 brew tap 沒有顯示 homebrew/core,請設定自己編輯本機副本

  1. 在您的 shell 環境中設定 HOMEBREW_NO_INSTALL_FROM_API=1
  2. 執行 brew tap homebrew/core 並等待複製完成,然後
  3. 執行 brew edit <formula>EDITOR 中開啟公式。

您不必將修改提交回 homebrew/core,只要將公式編輯成您個人需要的樣子,然後 brew install <formula>。作為額外好處,brew update 會將您的變更與上游合併,因此您仍然可以讓公式保持最新,包含您的個人修改!

請注意,如果您正在編輯核心公式或 cask,您必須在使用 brew installbrew update 之前設定 HOMEBREW_NO_INSTALL_FROM_API=1,否則它們會忽略您的本機變更並預設使用 API。

若要復原您對 Homebrew 任何儲存庫所做的所有變更,請執行 brew update-reset。它會將所有 Homebrew 的儲存庫還原為上游狀態。

我可以製作新的公式嗎?

是的!這很簡單!如果您已經有 homebrew/core 的本機副本(請參閱上方),請使用 brew create 命令。Homebrew 隨後會在 EDITOR 中開啟公式,以便您可以編輯它,但它可能已經安裝;請嘗試: brew install <formula>。如果您遇到任何問題,請使用 --debug 參數執行命令,如下所示: brew install --debug <formula>,這會讓您進入偵錯殼層。

如果您希望您的新公式成為 homebrew/core 的一部分,或想進一步瞭解如何撰寫公式,請閱讀 公式食譜

如何從其他人的 pull request 取得公式?

確保您有 homebrew/core 的本機副本,然後

brew update
brew install hub
cd "$(brew --repository homebrew/core)"
hub fetch github_username
hub pr checkout pull_request_number

為什麼會刪除或停用某個公式?

使用 brew log <formula> 來找出!可能是因為它有 未解決的問題 和/或 我們的分析 指出它沒有被廣泛使用。

對於已停用和已棄用的公式,執行 brew info <formula> 也會提供說明。

Homebrew 這個名稱很差,太過於普通;為什麼會選擇這個名稱?

Homebrew 的創建者 @mxcl 對啤酒主題不太感興趣,也沒有考慮到這個專案實際上可能會很受歡迎。等 Max 意識到它很受歡迎時,已經太遲了。然而,今天,Google 搜尋「homebrew」的第一個結果與啤酒無關 😉

「僅限 keg」是什麼意思?

這表示該公式只安裝在 Cellar 中,而沒有連結到預設前置詞。這表示大多數工具都找不到它。您可以透過執行 brew info <formula> 來查看公式為何只安裝為 keg-only,以及將其包含在 PATH 中的說明。

您可以 修改工具的建置設定 來尋找 keg-only 相依性。或者,如果您需要的話,可以使用 brew link <formula> 連結公式,不過如果您正在覆蓋 macOS 軟體,這可能會導致意外行為。

如何為某個公式指定不同的設定參數?

brew edit <formula> 並直接編輯公式。目前沒有其他方法可以做到這一點。

為什麼我無法從「未識別的開發人員」開啟 Mac 應用程式?

某些應用程式可能會顯示類似這樣的彈出訊息

Gatekeeper unidentified developer message

這是 Apple 的安全功能。最重要的資訊是你可以允許個別應用程式豁免此功能。這允許應用程式在系統其他部分仍受保護時執行。

務必保持系統範圍的保護功能啟用,並僅在需要時為特定應用程式停用。

如果你確定信任該應用程式,你可以右鍵按一下其圖示並選擇開啟來為其停用保護功能。

Right-click the app and choose Open

在產生的對話方塊中,按一下開啟按鈕讓 macOS 永久允許應用程式在此 Mac 上執行。除非你確定信任該應用程式,否則請勿執行此操作。

Gatekeeper unidentified developer open prompt

或者,你可以在安裝時提供 --no-quarantine 切換,以不將此功能新增至特定應用程式。

為什麼在執行 brew upgrade 時,某些應用程式不會包含在升級中?

在執行 brew upgrade 後,你可能會注意到某些你認為應該升級的 cask 沒有升級。

正如你可能知道的,許多 macOS 軟體可以自行升級

Sparkle update window

這可能會在與 Homebrew Cask 的 upgrade 機制搭配使用時造成衝突。

當軟體使用其內建機制自行升級時,會在 Homebrew Cask 不知情的情況下發生,導致兩個版本不同步。如果你在我們記錄的軟體版本較低時透過 Homebrew Cask 升級,你會降級。

有幾個想法可以解決這個問題

因此我們讓軟體保持原狀。使用 Homebrew Cask 安裝的任何內容都應該與手動安裝時一樣。但由於我們也想要支援不會自行升級的軟體,我們會將 auto_updates true 加入到會自動更新的軟體的 cask 中,將它們排除在 brew upgrade 之外。

使用 version :latest 的 Cask 也會被排除,因為我們無法追蹤它們的已安裝版本。詢問此類軟體的開發人員提供版本化版本(即在下載 url 的路徑中包含版本)會有幫助。

如果你仍想要強制透過 Homebrew Cask 升級軟體,可以在 upgrade 指令中特別參照它

brew upgrade <cask>

或使用 --greedy 參數

brew upgrade --greedy

請參閱 brew 手冊頁面upgrade 部分,以取得更多詳細資訊。

為什麼當我執行 brew upgrade 時,我的 cask 應用程式會失去 Dock 位置/Launchpad 位置/權限設定?

Homebrew 有兩種可能的策略來更新 cask 應用程式:解除安裝舊版本並重新安裝新版本,或用新內容取代應用程式的內容。使用解除安裝/重新安裝策略時,macOS 會認為應用程式正在刪除,而沒有重新安裝的意圖,因此它會移除舊應用程式的部分內部元資料,包括它在 Dock 和 Launchpad 中出現的位置,以及它已被授予哪些權限。內容替換策略會將升級視為就地升級,以此來解決這個問題。但是,從 macOS Ventura 開始,只有當更新應用程式(在本例中為執行 Homebrew 的終端機)已 授予某些權限 時,才允許進行這些就地升級。只要「應用程式管理」或「完整磁碟存取」權限就足夠了。

Homebrew 在擁有必要權限時會預設採用原位升級。否則,它將使用解除安裝/重新安裝策略。

Fork me on GitHub