LoginSignup
2

More than 3 years have passed since last update.

macOS CatalinaにPython3.8をインストールし、セイウチ演算子を試す

Posted at

モチベーション

  • Python3.8で利用可能となったセイウチ演算子(:=)を使ってみたい
  • Catalina出たしPython環境をアップデートしたい

インストール

先に結論

これだけでうまくいきました。
私の環境はanyenv x pyenvでPythonを管理しているため、python-buildのディレクトリパスは適宜読み替えていただければと。

$ cd ~/.anyenv/envs/pyenv/plugins/python-build && git pull origin
$ pyenv install 3.8.0

以下、試行錯誤の備忘録として。

pyenvで3.8-devのインストールを試みるもエラー

$ pyenv install 3.8-dev
・・・
Inspect or clean up the working tree at /var/folders/pv/nt2zdh7d0bzf2jlwn0zqgpnw0000gn/T/python-build.20191020002826.40064
Results logged to /var/folders/pv/xxx/T/python-build.20191020xxx.xxx.log

とあったのでログを見ると、以下のあたりが怪しい。

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found                                          #       include <X11/Xlib.h>
                ^~~~~~~~~~~~
1 error generated.

xquartzをインストールしてみた

$ brew cask install xquartz

これで再実行したところ↑のエラーは消えたものの、やはりインストール自体は失敗してしまう。

CFLAGSを足して実行してみた

ビルド時にCのヘッダがうまく読み込めてないのかな?と思い、以下実行。

$ CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.8-dev     

これもだめ。

pyenvが古いらしい。。。

エラーをよく見ると、こちらのwikiを見ろ、と。
https://github.com/pyenv/pyenv/wiki/Common-build-problems

そして、私のpyenvがそもそも古かったようなのでpython-buildをUpdate
私の場合、anyenvを使ってpyenvを管理しているため、以下のディレクトリにpython-buildプラグインが入っています。


$ cd ~/.anyenv/envs/pyenv/plugins/python-build && git pull origin

するとちゃんと3.8.0がリストに入ってきてた。。。(まだ3.8-devしか無いのかと完全に勘違いしていたという)

$ pyenv install -l
・・・
  3.7.1
  3.7.2
  3.7.3
  3.7.4
  3.7.5
  3.7.5rc1
  3.8.0
  3.8-dev
  3.9-dev
・・・
$ pyenv install 3.8.0
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.0.tar.xz...
-> https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
Installing Python-3.8.0...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.8.0 to /Users/xxx/.anyenv/envs/pyenv/versions/3.8.0

と、いう対処方法がこのあたりに書かれていました。
https://github.com/pyenv/pyenv/wiki/Common-build-problems#python-build-definition-not-found

なるほどー

セイウチ演算子を試す

早速試してみる

pyenvで利用するデフォルトのPythonを3.8.0に変更。
これまで3.6.6を利用していたので随分すっ飛ばしている。

$ pyenv global 3.8.0

$ pyenv versions
  system
  3.6.6
* 3.8.0 (set by /Users/xxx/.anyenv/envs/pyenv/version)

セイウチ演算子(:=)を使ってみる

変数を定義しつつ、変数に与えられた値をそのまま利用できる、ということで、試しにやってみた。
与えられた2つの引数を加算する関数addを無名関数で定義しつつ、引数に2, 3を与えてみる。

(add := lambda x, y: x + y)(2, 3)

以下、実行結果。

$ python
Python 3.8.0 (default, Oct 20 2019, 01:28:34)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

# セイウチ演算子を使って関数を定義しつつ実行
>>> (add := lambda x, y: x + y)(2, 3)
5

# 変数を確認すると、確かに関数が設定されている
>>> add
<function <lambda> at 0x1067c7dc0>

# 変数名から関数を呼び出してみる
>>> add(2, 10)
12

なにこれ便利。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2