【エラー】’AioClientCreator’ object has no attribute ‘_register_lazy_block_unknown_fips_pseudo_regions’

TIPS

こんにちは。ざわかける!のざわ(@zw_kakeru)です。
pythonでpandas経由でs3にアクセスしようとしたらエラーが出たので解決Tipsです。

動作環境

Python: 3.9.4
jupyter: 1.0.0
pandas: 1.3.4
pip: 20.2.3

起きたこと

jupyter notebookを起動して、pandas経由でs3にアクセスしようとしたところ、次のようなエラーが出力されました。

‘AioClientCreator’ object has no attribute ‘_register_lazy_block_unknown_fips_pseudo_regions’

s3が使えません。困った。
昨日までは正常にアクセス出来ていたんですが、今日からはダメになったみたいですね。
どうも依存関係がおかしいっぽいです。

やったこと

s3へのマウントがうまくいっていないので、s3fsをアップグレードしてみましょう。

$ pip install -U s3fs

基本的にはこれで直ります。
jupyter notebookでカーネルを再起動してから実行してみてください。

私の場合は、s3fsをアップグレードしようとすると別のエラーが発生しました。

$ pip install -U s3fs

(めっちゃ長いので省略。)

Installing collected packages: botocore
  Attempting uninstall: botocore
    Found existing installation: botocore 1.23.23
    Uninstalling botocore-1.23.23:
      Successfully uninstalled botocore-1.23.23
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.

We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

boto3 1.20.0 requires botocore<1.24.0,>=1.23.0, but you'll have botocore 1.20.106 which is incompatible.
awscli 1.22.23 requires botocore==1.23.23, but you'll have botocore 1.20.106 which is incompatible.
Successfully installed botocore-1.20.106
WARNING: You are using pip version 20.2.3; however, version 21.3.1 is available.
You should consider upgrading via the '/home/hoge/.pyenv/versions/3.9.4/bin/python3.9 -m pip install --upgrade pip' command.

依存関係のエラーですね。
最新のs3fsでは、botocoreのバージョンがboto3(1.2.0)ライブラリ上では1.23.0から1.24.0まで、awscli(1.22.23)ライブラリ上では1.23.23である必要があるみたいです。
(両方満たすbotocoreのバージョンは1.23.23しかありませんねぇ。)

なぜ今このタイミングでエラーが出るようになったのかは謎ですが、エラーメッセージにも書かれているように、依存関係の競合チェックを厳しくするために2020年10月以降にpipの挙動が変わるので、パッケージのインストールやアップグレードのときにエラーになってしまうことがあるようです。
解決策としてはWe recommend…の記述にあるように、pipコマンドの実行時に–use-feature=2020-resolverのオプションを付ければ良いようです。

$ pip install --use-feature=2020-resolver -U s3fs

これで実行可能です。
しかし今後も別のライブラリのインストール時に同種のエラーが出る可能性があり、そのたびにpipコマンドにこのオプションをつけるのはめんどくさいので私はもう素直にpipをアップグレードしました。
一番最後に出ているWarningに書かれているコマンドを実行します。

$ /home/hoge/.pyenv/versions/3.9.4/bin/python3.9 -m pip install --upgrade pip
Collecting pip
  Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)
     |████████████████████████████████| 1.7 MB 10.5 MB/s
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.2.3
    Uninstalling pip-20.2.3:
      Successfully uninstalled pip-20.2.3
Successfully installed pip-21.3.1

pipのバージョンが20.2.3から21.3.1にアップグレードされました。
この状態で再びs3fsのアップグレードに挑戦します。

$ pip install -U  s3fs

すると先ほど出ていたエラーが消えて、無事に処理が終了しました。
jupyter notebookに戻り、kernelを再起動してから先ほどのセルを実行してみると、

無事、s3へのアクセスができました。
めでたしめでたし。

終わりに

最初にjupyter notebook上に表示された‘AioClientCreator’のエラーメッセージだけでは、ぱっと見ではs3fsをアップグレードすれば直る、と分からないので難しいかもしれません。
まあ今回はそれが分かった上で別のところでハマったわけですが。

あと今回はやりましたが、個人的にpip install -U pipのコマンドはあんまりやりたくないんですよね、、
なんかバグりそうで、、、
今度pip install -U pipしないでpipをアップグレードする方法もまとめておこう。

タイトルとURLをコピーしました