こんにちはann-toqueです。この記事を書こうと思ったのはPythonを利用した業務改善のための開発を行い、かつ分析案件も並行して抱えてた際に、Jupyter Notebookを利用したインタラクティブな分析環境と前述の開発環境の両立を図りたく、タイトルの構成になったので紹介したいと思います。
記事について
対象者:
- Jupyter Notebookを利用して分析を行うし、python単体のちょっとしたコードも書く方
- 分析の時はJupyter Notebook、開発の時は別のエディタ、IDEと使い分けててスイッチングコストが高いなと感じている方
内容:
- プロジェクト毎にpythonのバージョン、モジュール管理を行い、Visual Studio Code上でJupyter Notebookを利用する方法
触れないこと:
- Windows版の構築方法(まぁ大きな流れはそんなに変わらんとは思います)
- インストール方法の詳細などは参考記事が多数あるので触れません
概要
今回はエディタをVScodeで統一し、pyenvとpoetryで開発環境と分析環境を分けて、分析環境のみでVScodeのJupyter Notebookを利用できる構成を作りました。構成のそれぞれの説明・役割については以下の通りです。
- pyenv: Python本体のバージョン管理。ローカルに異なるpythonバージョンをインストールでき、使い分けが可能に。
- poetry: Pythonモジュールの依存関係の管理
- Visual Studio Code(以下VScode): Microsoft社制のコードエディタ。様々な言語に対応できる拡張機能が豊富。
- Jupyter Notebook: ノートブックと呼ばれるインタラクティブなPython実行環境。主に分析の際に利用される。
構築の流れ
- poetryのインストール
- pyenvのインストール
- VScodeのインストール
- VScodeでpoetryで追加したモジュールを読み込めるようにする
- VScodeのPythonインタプリンタにpyenvのPythonを追加
- poetryでJupyter Notebookを追加
※ 1-3は特に依存関係ないのでどれからインストールしれも構いません
poetryのインストール
以下の記事にpoetryの解説・インストール方法の記載がありますので、ここでは大まかな利用方法だけ記載します。 Poetry: Python の依存関係管理とパッケージングを支援するツール | org-技術
プロジェクトの作成
__init__.py
や README.md、testディレクトリなどのディレクトリやファイルが生成されます。pyproject.tomlが構成管理ファイルにあたります。
$ poetry new playground-analytics
モジュールの追加
今後poetryを利用し、モジュールを追加していくとpyproject.tomlの [tool.poetry.dependencies]
が更新されていきます。
$ poetry add sklearn@latest
[tool.poetry] name = "playground-analytics" version = "0.1.0" description = "" authors = ["anntoque <???@email.com>"] [tool.poetry.dependencies] python = "^3.7" sklearn = "^0.0" pandas = "^1.0.3" matplotlib = "^3.2.1" jupyter = "^1.0.0" seaborn = "^0.10.1" scipy = "^1.4.1" statsmodels = "^0.11.1" [tool.poetry.dev-dependencies] pytest = "^4.6" [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api"
pyproject.toml の読み込み
pyproject.toml さえあればGitHubなどのリモートリポジトリ上で共有されているプロジェクトをローカルに落とした際も環境の再現が可能です。
poetry install
pyenvのインストール
Homebrewを利用する場合は以下の通りです。
$ brew install pyenv
※ bashを利用したインストール方法も用意されています。
pyenv/pyenv-installer: This tool is used to install pyenv
and friends.
利用方法
まず pyenv install
で利用したいバージョンのpythonをダウンロードし、pyenv local
でそのディレクトリ配下で利用したいpythonのバージョンを指定できます。以下に先ほどpoetryで作成したプロジェクトに移動し、そのプロジェクト内で指定するpythonのバージョンを指定するコマンドを記載します。
$ pyenv install 3.7.6 $ cd playground-analytics $ pyenv local $ python --version Python 3.7.6
以下記事に基本利用方法が平易に書いてあるので、参考になります。
Pyenvの使い方 - Qiita
VScodeのインストール
こちらからダウンロードし、インストールしてください
Download Visual Studio Code - Mac, Linux, Windows
VScodeでpoetryで追加したモジュールを読み込めるようにする
このままpoetryでモジュールを追加していき、VScode上の.pyや.ipynb内で import
したとしても読み込まれることはありませんので、以下Qiitaの記事の通りpoetryの設定を変更し、作成したプロジェクト内のvirtualenvに追加していく変更を行います。この変更をかけることでVScodeからpoetryで追加したモジュールの読み込みを行えるようになります。
$ poetry config virtualenvs.in-project true
- poetryで作ったpythonプロジェクトをVSCodeに読み込ませるとエラーになった時の対処法 - Qiita
- Configuration | Documentation | Poetry - Python dependency management and packaging made easy.
VScodeのPythonインタプリンタにpyenvのPythonを追加
デフォルトの設定だとVScodeのPythonインタプリンタの参照先にpyenvで追加したPythonを利用する設定になっていないので、VSCodeの設定ファイルであるsettings.json
のpython.pythonPath
に追加します。以下Qiita記事の「VSCode の Python Interpreter の指定」の部分を参考にしました。
{ "python.pythonPath": "/Users/anntoque/playground-analytics/.venv/bin/python3", }
poetryでJupyter Notebookを追加
poetryはプロジェクト毎にモジュール管理ができるので、分析系のプロジェクトではjupyterを入れて、開発系のプロジェクトには入れないという選択が可能になります。 Jupyter Notebookを利用したい場合はjupyterモジュールの追加が必要ですので、追加しましょう。
$ poetry add jupyter@latest
VScodeでのJupyter Notebookの機能などは以下を参考にしてください。
完成!!とまとめ
以上で作業は終了です。pyenvでインストールしたPythonのバージョンを利用し、poetryでモジュール管理をpyproject.tomlで行い、VScode上でJupyter Notebookを利用することでインタラクティブな分析環境を構築することができました!!
構成の変更前と後の比較
- エディタ:開発の時はVScode + 分析の時はJupyter Notebook →開発・分析どちらも VScode(Jupyter Notebook)
- python環境:単一 → プロジェクト毎に複数バージョン利用
- モジュール管理: 一括管理 → プロジェクト毎に管理
Appendix:他検討
JupyterLab
Jupyter Notebookにはないファイルの構成管理・デバッグなど行える環境もありますが、あくまでも分析向けな気がしています。
※ 利用したことがないのでイメージ違ったらすいません