さわらブログ

さわら(@xhiroga)の技術ブログ

homebrewでinstallしたawscli v2の起動時の `SyntaxWarning: "is" with a literal. Did you mean "=="?` に対してできること

homebrewでawscliをinstallしたら、SyntaxWarningが出るようになりました。

f:id:hiroga_cc:20200215081549p:plain

aws --version
zsh: correct 'aws' to 'as' [nyae]? n

/usr/local/Cellar/awscli/2.0.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if x is 0 or x is 1:
/usr/local/Cellar/awscli/2.0.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if x is 0 or x is 1:
/usr/local/Cellar/awscli/2.0.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
  elif y is 0 or y is 1:
/usr/local/Cellar/awscli/2.0.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="?
  elif y is 0 or y is 1:
/usr/local/Cellar/awscli/2.0.0/libexec/lib/python3.8/site-packages/jmespath/visitor.py:260: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if original_result is 0:
aws-cli/2.0.0 Python/3.8.1 Darwin/19.0.0 botocore/2.0.0dev4

どうもawscli v1から既知らしい。どういうことだろう?

github.com

TL;DR

awscliが依存しているJSONの検索ライブラリ jmetpath (おそらく --query オプション等で活躍しているのかな?)が number型を is で等値判定しているが、これはPythonの言語仕様ではない。
CPythonの実装ではたまたま可能だったが、Python3.8からはWarning出すようにしたとのこと。

docs.python.org

homebrewで入るawscliはv2からデフォルトのPython実行環境をPython3.8にしている。

で、 jmethpath には3ヶ月前に対応するPRが上がってるんだけどマージされてない。 レビュワーさんの対応が遅れているうちに Travis.CI がPython2.7と3.3をサポートしなくなり、一方で jmethpath 自体は Python2.7と3.3へのサポートを非推奨期間を設けながら続けるつもりらしく、結果CIが腐っている...というように読める。

github.com

できること

awscliのシェバンに export PYTHONWARNINGS=ignore 相当のオプションを追記してWarningを黙らせる、っていうのが手っ取り早いかもですね。 もしくは気にしない。Pythonコンパイラの仕様なのか知らないけど、初回起動時以降は今のところ静かなので....

もっと詳しい方、解釈に違いがあれば教えて下さい🙏