2020/04/19

Homebrew で awscli を upgrade して、依存の keg-only python@3.8 を link する

Homebrew が提供する awscli が 2.0 になる前辺り、必要な python が python@3.8 になりました
awscli を upgrade する際、 python を消して python@3.8 を使うようにしたログです。


環境(ブログ作成時)

  • OS: macOS Mojave 10.14.6
  • Homebrew: 2.2.13-74-gecea0e5
    • homebrew-core (git revision eb6d; last commit 2020-04-19)
    • python: Python3.7.7
    • python@3.8: Python 3.8.2
  • awscli: aws-cli/2.0.8 Python/3.8.2 Darwin/18.7.0 botocore/2.0.0dev12


keg-only formula と Homebrew の install 事情

Homebrew は元々、 /usr/local/bin へ直接 formula を install しません。
/usr/local/Cellar などの PATH に install して、そこから symlink を貼ります。

その中で key-only formula は「install しても /usr/local/bin に link しない」 formula です。
今回は python@3.8 が keg-only に指定されています。理由として executable の衝突回避が挙げられます。
  • 前提として、現時点で Homebrew が提供している python は 3.7 系列
  • python が存在する環境に python@3.8 も installすると /usr/local/bin/python3 が重複する
  • /usr/local/bin/python3 を 3.7 系列に譲るために、 3.8 は keg-only として link しない
という感じかと思われます。


keg-only formula を link する前の確認

 link の前に、念の為 python が使われていないか、以下のコマンドでチェックします。
  • $ brew uses --installed python
何も出力されない場合は install 済みの formulas 全てにおいて python を使っていません。
出力がある場合、その formula は python を使っています。 3.8 の link は止めた方が良いでしょう。


python@3.8 を /usr/local/bin に link する

上記のチェック時、私の環境では出力が無かった為 python@3.8 を link する事にしました。
なお、 keg-only formula を link する場合は --force が必要です。
  • $ brew upgrade awscli
    • 依存関係で python@3.8 が install される
  • $ brew link --force python@3.8
  • $ which python3 aws
    • /usr/local/bin/python3
    • /usr/local/bin/aws
  • $ python3 -V
    • Python 3.8.2
  • $ aws --version
    • aws-cli/2.0.8 Python/3.8.2 Darwin/18.7.0 botocore/2.0.0dev12
これで python3 と awscli が upgrade できました。良し良し。
ちなみに homebrew-bundle では、 link: true を付けると link してくれます

0 件のコメント:

コメントを投稿