はじめに
「Google Cloud実践活用術」という本をやっていて、ライブラリのインポートでエラーがでました。
そのライブラリが環境に合っていないのではないかと疑ったのですが、自分のミスでした。
ContextualVersionConflict: (PyYAML 3.13 (/usr/local/lib/python3.7/dist-packages), Requirement.parse('pyyaml>=5.2'), {'libcst'})
というエラーが私の環境ではでています。
ライブラリ名は違えど、同じ原因でエラーがでる方いるかと思いましたのでまとめます。
環境
- Google Colabratory
問題
以下のコードを実行した際にエラーが発生しました。
# セル1
from google.colab import drive
drive.mount('/content/drive')
# セル2
!pip install --upgrade google-cloud-speech
# セル3 (サービスアカウントキーと音声ファイルのフォルダに移動
cd drive/MyDrive/Colab\ Notebooks/cloudspeech
# セル4 (サービスアカウントキーを環境変数に設定)
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './credentials.json'
# セル5 (エラー)
from google.cloud import speech
エラーは以下となります。
---------------------------------------------------------------------------
ContextualVersionConflict Traceback (most recent call last)
<ipython-input-5-589439c37498> in <module>()
----> 1 from google.cloud import speech
9 frames
/usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py in resolve(self, requirements, env, installer, replace_conflicting, extras)
775 # Oops, the "best" so far conflicts with a dependency
776 dependent_req = required_by[req]
--> 777 raise VersionConflict(dist, req).with_context(dependent_req)
778
779 # push the new requirements onto the stack
ContextualVersionConflict: (PyYAML 3.13 (/usr/local/lib/python3.7/dist-packages), Requirement.parse('pyyaml>=5.2'), {'libcst'})
PyYAMLを3.13や5.2をインストールしたり、アンインストールしたりしたが解決できず
ネットを調べても情報が見つかりませんでした。
解決方法
コードの実行順序が悪いことがわかりました。
google-cloud-speech
をインストールしたあとに、認証のためにカレントディレクトリを移動したのが原因でした。
以下のコードで動くようになりました。
# セル1
from google.colab import drive
drive.mount('/content/drive')
# セル2 (サービスアカウントキーと音声ファイルのフォルダに移動
cd drive/MyDrive/Colab\ Notebooks/cloudspeech
# セル3
!pip install --upgrade google-cloud-speech
# セル4 (サービスアカウントキーを環境変数に設定)
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './credentials.json'
# セル5
from google.cloud import speech
ライブラリをインストールする前に、ディレクトリを移動すれば問題ありません。
おわりに
いままでやったことのないミスだったのですが、初心者の方などはやってしまうのかなと思いましたので一応まとめてみました。ライブラリ名を入れてしまったので記事にたどり着く人は少ないかと思いますが、誰かの役に立てばと思います。