この記事はどのような内容?
Docker
+ VSCode
+ Remote Container
で作るデータ分析環境構築の手順が書いてあります。
想定読者
「Jupyter Lab? それともGoogle Colaboratoryなどのクラウドサービス?...なんか色々あって、Pythonのデータ分析環境わからん!簡単に導入できて、かつそれなりに快適な分析環境を整えたい!」
という方に向けて書きました。
サンプルリポジトリはGitHubにPushしていますので、cloneしてコンテナを立ち上げ、READMEの手順に沿ってリモート接続していただければ、10分程度で環境構築ができます。
この記事を読んだ方のデータ分析環境の選択に、少しでも貢献できましたら幸いです。
はじめに
最近、Python
でデータ分析する機会があり、Jupyter
が動く環境を構築する必要がありました。
ローカルにJupyter Lab環境を直接構築しても良いのですが、なるべくローカル環境は汚したくないですし、Jupyter LabではVSCodeと違って入力補完等のサポートが弱いので、ちょっと使いにくい。
色々と調べていると、VSCodeのOctober-2019-releaseで、Microsoft公式の Python 拡張機能が、.ipynb
(Ipython notebook専用ファイル)をサポートしていたことを知りました。よって、コーディング環境はJupyter Labではなくインテリセンスなどが効くVSCode
を選択。
仮想環境も、Jupyter LabのDockerイメージがDocker Hubにpushされていることを知ったので、pullしてこれば手軽に環境構築ができそうです。
ということで、
-
仮想環境は、
Jupyter Lab
のDocker
イメージを使う -
Remote Container
を使って、起動したコンテナにリモート接続 -
Remote Containerで接続したワークスペース内で、入力補完やLinterを効かせながらコーディング
上記のような環境をデータ分析環境として選択しました。
イメージはこのような感じです。
Docker + VSCode + Remote Containerで作るJupyter Lab(Python)分析環境構築
以下の内容は、自分で環境構築をされる方用に、少し細かく説明したものになります。
この記事の上部に載せたリポジトリには、必要拡張機能や各種設定を.vscode/settings.json
・.devcontainer/devcontainer.json
に記述 & 最低限の手順をREADMEに記載しておりますので、以下手順を読む必要がないようにしてあります。
動作環境
Docker
他の方が書かれた記事:【Docker】3分でjupyterLab(python)環境を作る!を参考に...というか丸パクリなのですが、docker-compose.yml
に、Jupyter Lab環境構築に必要な設定を記述します。
version: '3'
services:
notebook:
image: jupyter/datascience-notebook
ports:
- '8888:8888'
environment:
- JUPYTER_ENABLE_LAB=yes
volumes:
- ./work:/home/jovyan/work
command: start-notebook.sh --NotebookApp.token=''
volumes
にhome/ 以下にjovyan という名前でディレクトリを切っておりますが、jovyan
は Jupyter Notebookを使用する人々全員 という意味があるそうです。
参考:
これで、Jupyter Labが動く環境が用意できました。
Remote Container
このままdocker-compose up -d
でコンテナを立ち上げれば、http://localhost:8888 にアクセスしてJupyter Labでコーディングできます。
別にそれでも良いのですが、VSCodeの入力補完などの強力な拡張機能の恩恵を受けたいため、Remote Container
で立ち上げたコンテナにリモート接続し、VSCodeでコーディングしたいと思います。
Remote Containerに関しては、調べると他の方が詳しく説明をしてくださっていますので、そちらをご参照ください。
Remote Containerの設定
VSCode [設定]→[拡張機能]→[Remote Container]:インストール。
インストールすると、「Reopen in Container」というポップアップが表示されるので、選択。
すると、プロジェクトのdocker-compose.yml
の設定に基づいたコンテナを自動的にbuild & 起動してくれ、コンテナの中でVSCodeのワークスペースが開かれます。
(二回目以降は、VSCode左下の「><」みたいなマーク→reopen in Containerで接続できます。)
ワークスペース内では、ターミナルもコンテナのシェルと接続されているため、コマンドなどを流す際にいちいちdocker-compose ~
(もしくはエイリアス)をつける必要はありません。
ワークスペースを開くと、「No Python interpreter is selected...」といったポップアップが表示されます。これは、Pythonの実行環境を聞いてきているので、Jupyter Labの実行環境であるconda
環境「Python 3.xx 64-bit('conda': virtualenv)」を選択。
VSCode
起動したコンテナにリモート接続し、コンテナの中でVSCodeが開ける状態になりました。
ただ、このまま.ipynb
を開いてもIPython Notebook用の表示にならないため、ワークスペースに拡張機能を追加します。
ワークスペース内で[拡張機能]→[python(ms-python.python)]を探し、Dev Container: [プロジェクト名にインストールする]を選択。これで、IPython Notebook用の表示になります。
他にも、LinterやIntelliSense系の各種拡張機能を、適宜ワークスペースにインストールしてください。.devcontainer/devcontainer.json
内のextensions
に拡張機能を記載しておけば、ワークスペース起動時に自動的に読み込んでくれるので、プロジェクトの配布時などに便利です。
(※「はじめに」に載せたリポジトリには、python (ms-python.python)と自動インポート機能・型チェック機能をサポートしているpylance (ms-python.vscode-pylance)が読み込まれるように設定しています)
最後に。
新しい.ipynb
を開く度、そのままでは権限が付与されておらず、編集ができない状態になっています。おそらく「A notebook could execute harmful code when opened.」というポップアップが表示されるので、「Trust」を選択してください。
(ちょっとここが面倒です。ALL Trust
を選択しても、一度コンテナを再起動すると設定が初期化されます、、解決策ありましたらご教授ください)
環境構築完了!
これでDocker
+ VSCode
+ Remote Container
で、入力補完などの強力な各ツールを効かせつつ、データ分析ができる環境が用意できました!
なお、ワークスペースを閉じてもコンテナは起動しっぱなしなので、コンテナは都度停止するのを忘れないようにしてくださいね。
終わりに
Docker + VSCode + Remote Containerで、Jupyter Lab(Python)分析環境を作成しました。
入力補完も効きますし、自分的には快適だなぁと思っているのですが、Pythonでの分析をし始めたばかりなのでこれが正解かわかっておりません。
Google Colaboratory やAzure Notebookなどの便利なクラウドサービスもありますが、時間制限があったり、ローカルで分析した方が計算が早かった、という場合があったので、今回はローカルの環境構築方法にフォーカスしました。
内容の間違いや、もっと良い方法がありましたら、ご指摘・ご教授をお願いいたします。
では、快適なコーディング環境を!