rcmdnk's blog

入門 Python 3

一ヶ月前ほどで今更気づきましたが、 HomebrewからPython2のFormulaが削除されています。

Python2の削除

Homebrewで2年ほど前にPython3への移行で少しごたごたがありましたが、 2020年1月1日でPython2のサポートが終了したので 1 これを機にHomebrewでも Python2を削除したようです。

もともと上のときからpythonというFormulaはPython 3をインストールするようになっていましたが、 今回python@2及び、そのエイリアスのpython2が削除されました。

python@2: delete (#49796) · Homebrew/homebrew-core@028f11f

削除されてももともと入れていた場合、brew listとかでpython@2とかが見れるし入ったままになっていると思いますが、 一旦削除すると再インストールはできない状態になります。

上のコミットメッセージに

python@2: delete (#49796)

EOL 1 January 2020.
We gave it 1 month more to live so that people had time to migrate.
All in all, developers had 11 years to do their migration.

You can use the `brew extract` command and maintain python@2 in your own
tap if necessary:
https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap

とありますが、brew extractが上手くいかないので、もし今後どうしても HomebrewでPython2をインストールしたい場合、

$ brew install brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/86a44a0a552c673a05f11018459c9f5faae3becc/Formula/[email protected]

の様に過去のFormulaを直接参照するような形にすれば入れることはできます。

macos - Brew - reinstalling python@2 - Stack Overflow

Python3

Python3に関してはpythonというFormulaが担当してます。 Python2が削除されてもbrew install python/usr/local/bin/pythonへリンクを作ることは今のところしないようで、 python3pip3コマンドを使うように、としています。

pythonpipで3を呼びたいときは /usr/local/opt/python/libexec/binにリンクがあるので ここへPATHを通せばpythonpython3が呼べるようにはなります。

site-packagesは$(brew --prefix)/lib/pythonX.Y/site-packages

Python — Homebrew Documentation

現時点でpythonが入れるPythonは3.7.6です。

これとは別に[email protected]というフォーミュラが用意されていて、 /usr/local/opt/[email protected]/bin/python3にインストールされます。 site-packagesは/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages

セットアップの更新

とりあえずPython2についてどうしようか、と思いましたが、 削除してしまいました。

$ brew rm python@2

まだ、macOSデフォルトの/usr/bin/python(2.7.16)は存在しています。

現状Shebangで

#!/usr/bin/env python

と呼んでる物がまだ結構あって(Python3に対応しているものでも)、Python3への対応をどうしようか、と思ってるんですが、 とりあえず様子見として/usr/local/opt/python/libexec/binへもPATHを通して pythonでもpython3を呼ぶようにして見ようと思います。

以下の様な設定を.bashrcとかに追加。

_set_homebrew_path () {
  brew_prefix=$(command brew --prefix 2>/dev/null)
  ret=$?
  if [ $ret -ne 0 ];then
    return
  fi
  export PATH="$brew_prefix/bin:$PATH"
  export PATH="$brew_prefix/sbin:$PATH"
  export LD_LIBRARY_PATH="$prefix/lib:$LD_LIBRARY_PATH"
  #...
  #...
  local python3=$("$brew_prefix/bin/python3" --version 2>/dev/null)
  local ret=$?
  if [ $ret -eq 0 ];then
    export PATH="/usr/local/opt/python/libexec/bin:$PATH"
    python_version=$(echo "$python3"|cut -d' ' -f2|cut -d '.' -f 1,2)
    export PYTHONPATH="$brew_prefix/lib/python$python_version/site-packages"
  fi
  #...
  #...
}

_set_homebrew_path

Pythonスクリプトの更新

今後、各OSでPythonをどう扱っていくかわかりませんが、 Python2の代わりにPython3を標準的に入れてくようにはなると思います。

一部のOSとかで標準的にPython3を/usr/bin/pythonに入れるものもあるみたいですが、 一般的にはPython3はpython3で呼ぶような状態で、 しばらくはそのままだと思います。

ただ、今更Python2用のコードを書いても仕方ないので、 これを機に使ってるスクリプトは基本的に

#!/usr/bin/env python3

に置き換えて使える様に変更していかないとな、といったところ。

Sponsored Links
Sponsored Links

« ワイヤレスリンク対応体重計: Withings Body Cardio (Wi-Fi)への移行 poetryでtensorflow (2.1.0)をaddすると出るエラー »

}