Alfred Workflows 無法在 macOS 12.3 使用 Python2 的解決方法

這裡記錄了我在升級至 macOS 12.3 之後,由於 Python 2 被移除導致部分 Alfred workflows 無法運作的探索和嘗試。

這裡記錄了我在升級至 macOS 12.3 之後,由於 Python 2 被移除導致部分 Alfred workflows 無法運作的探索和嘗試。

今天,我手頭上的 MacBook 出現了一些問題,嘗試解決未果,最後按照 Apple 官網的建議,我升級到了最新版本。雖然我並不認為這樣會有所幫助,但還是嘗試了一下。

我一直沒有升級的主要原因是 macOS 12.3 刪除了內置的 Python 2。這意味著我在 Alfred 中一部分依賴 Python 2 的 workflows 可能無法運作(在 workflow 的開發者社群中,有一種看法認為應該使用 macOS 內置的 Python 2 版本,以免用戶需要另行安裝新版 Python 3,關於這個問題的討論可以參考這裡)。加上 Alfred workflow 的開發活躍度似乎在逐漸下降,更新也不頻繁。

升級後,確實有部分 workflows 無法成功運行。我在 Github 上搜尋了一些,但並未發現有任何更新。

需要關閉 SIP 的方法

既然如此,我想我可以下載一個 Python 2 版本,然後將其鏈接到 /usr/bin/python,這樣應該就可以解決問題了。

我已經安裝了 pyenv,所以安裝其他版本的 Python 並不困難。

我使用 pyenv install --list 指令查看到可以下載的最新 Python 2 版本是 2.7.18,於是我安裝了它:pyenv install 2.7.18

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Downloading openssl-1.0.2q.tar.gz...
-> <https://www.openssl.org/source/old/1.0.2/openssl-1.0.2q.tar.gz>
Installing openssl-1.0.2q...
Installed openssl-1.0.2q to /Users/oldestdream/.pyenv/versions/2.7.18

python-build: use readline from homebrew
Downloading Python-2.7.18.tar.xz...
-> <https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz>
Installing Python-2.7.18...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-2.7.18 to /Users/oldestdream/.pyenv/versions/2.7.18

然而,當我試圖建立 symbolic link 時,即使使用了 sudo,我仍然遇到了權限問題。

sudo ln -s "${HOME}/.pyenv/versions/2.7.18/bin/python2.7" /usr/bin/python

結果是:

ln: /usr/bin/python: Operation not permitted

根據我在網上找到的資料,我需要暫時關閉 macOS 的系統完整性保護(System Integrity Protection,簡稱 SIP)才能進行這項操作。

我不希望折騰,所以我決定不繼續這個方法。真的有需要的人可以參考以下的資料:

https://stackoverflow.com/questions/36730549/cannot-create-a-symlink-inside-of-usr-bin-even-as-sudo

https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection

Alfred 官方提供的方法

Alfred 官網除了建議你等待更新之外,也提供了一個解決(部分)workflows 無法運行的方法。

https://www.alfredapp.com/help/kb/python-2-monterey/

1
2
3
4
5
export PATH="/opt/homebrew/bin:/usr/local/bin:${PATH}"
eval "$(brew shellenv)"
brew install pyenv
pyenv install 2.7.18
ln -s "${HOME}/.pyenv/versions/2.7.18/bin/python2.7" "${HOMEBREW_PREFIX}/bin/python"

Alfred 會自動將 Workflow 的執行語言從 /usr/bin/python 改為 /usr/local/bin/python

Alfred Workflow Language

我相信這樣應該能讓部分 workflow 恢復運行。

如果還是不行,你可以開啟 debug mode,看看是什麼問題。

如果還是不行,那可能就需要修改 workflow 的文件了。你可以將 Run Script 中的 Script 另存為一個 py 文件,然後將執行語言改為 /bin/bash 或者 External Script,並指定使用安裝好的 Python 2 來執行,這樣應該就可以了。但這樣做想想都覺得麻煩。


最後,我想我還是嘗試離開 Alfred,改用 Raycast 或者 Lacona 這類的 launcher 來看看。

comments powered by Disqus