はじめに
Dockerのbuildでインストールしていたライブラリがいきなり失敗することは時々おきます。
本来ならしっかりとバージョンを指定して、いつでも同じ環境にする必要があります。
しかし、私が今回触っていた環境ではElyra
がバージョン指定されておらず、インストールができなくなってしまったので、解決方法をまとめます。
環境
- windows
- Docker
- Python3
Elyraの環境はこの記事を参考に作成されています。
問題
Dockerfile
の以下の部分で以前は動いていたのですが、エラーが起きました。
# install elyra
RUN conda install -c conda-forge elyra
RUN jupyter lab build --dev-build=False --minimize=False
エラーは以下の通りです。
> [ 4/21] RUN conda install -c conda-forge elyra:
#7 2.620 Collecting package metadata (current_repodata.json): ...working... done
#7 17.16 Solving environment: ...working... failed with initial frozen solve. Retrying with flexible solve.
#7 164.5 Solving environment: ...working... failed with repodata from current_repodata.json, will retry with next repodata source.
#7 293.4 Collecting package metadata (repodata.json): ...working... done
#7 337.2 Solving environment: ...working... failed with initial frozen solve. Retrying with flexible solve.
#7 1554.1 Found conflicts! Looking for incompatible packages.
#7 1554.1 This can take several minutes. Press CTRL-C to abort.
#7 1554.1 failed
#7 1554.1
#7 1554.1 UnsatisfiableError: The following specifications were found to be incompatible with each other:
#7 1554.1
#7 1554.1 Output in format: Requested package -> Available versions
#7 1554.1
------
Conda環境の中で何かがコンフリクトを起こしているようでした。
こちらについて調べてのですが、よくわからず。別の方法で対処することにしました。
解決方法
1. 以前のバージョンを調べて指定する
以前利用していたElyraのバージョンを調べたところ1.5.3
でした。
ですので、以下のように指定することでインストールができました。
# install elyra
RUN conda install -c conda-forge elyra=1.5.3
RUN jupyter lab build --dev-build=False --minimize=False
しかし、別の同じような環境では同じエラーを起こしたり、1.5.3はJupyterLab
の3系(Python3)に対応していないこともあり、パイプライン上で.ipynb
を利用することができませんでした。
以前にそちらについて述べた記事を上げています。
ですので、別の方法も試してみました。
2. そもそもConda
でなくpip
でインストールできないか試してみる
datascience-notebook
がconda
でライブラリ管理されてるとのことで、Conda
を利用してインストールされていましたが、Pythonのライブラリをインストールする際にRUN pip3 install ○○
としていたため、pip
でインストールできるのでは?と思い試しました。
pip
でのインストールであれば、JupyterLabの3系に対応した最新版を入れることができます。
## install elyra
RUN pip3 install --upgrade elyra==2.2.4
RUN jupyter lab build --dev-build=False --minimize=False
無事できました。また、最新版をいれているため3系に対応しています。
ですので、パイプラインで.ipynb
を動かすこともできました。
そして、自動でコードチェックが走るためflake8
をわざわざJupyterのために入れる必要もありません。
結果として以前よりも使いやすい環境になりました。
さいごに
そもそもライブラリのバージョンを指定していれば起きていなかったので、改めて重要だなと感じました。
Elyrahはまだまだわからないことが多く、どのようにすればターミナルに標準出力できるのか。などドキュメントが英語しかない分調査できていないです。
今後もっと注目されたら嬉しいなと思っております。
参考文献