這裡記錄了更新至 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 版本,然後 link 去 /usr/bin/python 那便應該完事了吧。

因為我有裝 pyenv, 所以要安裝其他版本的 Python 並不麻煩。

pyenv install --list 見到最新可下載的 Python 2 版本為 2.7.18

那便安裝了pyenv install 2.7.18

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/

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 的執行 language 的選項由 /usr/bin/python 改為 /usr/local/bin/python.

相信會使部份 workflow 成功能行的。

不行的話,可以開 debug mode, 看看什麼問題,有可能需要額外安裝 tkinter 之類也説不定。

再不行,可能真得改 workflow 的檔案了。把 Run Script 裡的 Script 另存為一個 py 檔,然後改執行語言為 /bin/bash 或者 External Script 指定用安裝好的 Python 2 執行,大概能行吧。但想想都覺得麻煩。


最後,我還是想藉此嘗試離開 Alfred, 改用 Raycast 或者 Lacona 之類的 launch app 探索看看。

Recommended Posts

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments