はじめに
前回、VSCodeを使用して簡単なプログラムを動かしてみた。
このまま続けて簡単なプログラムを何個か実際に動かしてみて勉強をしてみようと考えましたが、チラチラとノートブックが便利という旨の記事を目にしました。
また、VSCodeでPythonの拡張機能をインストールした時に一緒にインストールされたJupyterという拡張機能がそのノートブックの機能だということだそうです。
便利ならば使わない手はないということで、今回はJupyter Notebookについて勉強した内容を整理し、て実際に使ってみた状況を備忘録として残します。
ノートブックとはなんだ
まずそもそも、ノートブックとは何なのだろう?
正直なところ便利ということしかわからない。なので以下の記事を参考にどのような機能かを整理します。
詳しいことが知りたい場合は参考資料を参照するとして、ノートブックとは一つのファイル(.ipynb)にソースコードとその出力結果、Markdown形式のメモをまとめて管理できるものらしい。
そして、このファイル自体がノートブックの実体のようです。
ソースコード中でも#
を使ってメモを記入できますが、長々とメモを書くとソースコードも汚くなりそうですし非常に便利な機能に感じます。
このノートブックを利用できるサービスはクラウド上で使用できるColaboratoryやwebアプリ版のJupyter Notebookなど複数あり、今回はVSCode上でJupyter Notebookの機能を使える拡張機能を使用します。
さっそく使ってみる
ノートブックが何か大まかに理解できたので早速VSCode上でJupyter Notebookの環境を使ってみます。拡張機能については2022年4月時点ではPythonの拡張機能(Python extension for Visual Studio Code)をインストールした際に標準でインストールされました。
参考
パッケージを追加する
VSCode上でJupyter Notebookを利用してコードを実行するには実行環境にJupyterパッケージのインストールが必要らしい。
モジュールとは? 例えで言うなら「部品」や「歯車」に当たります。 もっと具体的に言うなら拡張子が「.py」のファイルは全てPythonモジュールとなります。 パッケージとは? モジュールの集まったものがパッケージとなります。 例えで言うなら、「箱」ですね。 ライブラリとは? パッケージをいくつかまとめてインストールできるようにしたものです。 引用:https://qiita.com/_whitecat_22/items/3df18491c5f618c016d1
仮想環境を作成する
パッケージを実行環境にインストールする際には、パッケージ等の組み合わせ等によりプログラムが動かなくなることを避けるため、プロジェクトの用途に応じて仮想環境を作成し、仮想環境に必要なパッケージをインストールし開発を行うことが望ましいらしい。
ということで仮想環境を作成してみます。
仮想環境を作る方法はPythonのバージョンを指定したり様々あるようですが、今回はVSCode上でターミナルを開いてvenvというPythonの機能を使って作成します。
参考
まず、仮想環境を作成するディレクトリを作成します。
今回はC:\WorkSpace\Python\venv
というディレクトリを作成し、その中に仮想環境を作成することにしました。
VSCodeでファイル
→フォルダーを開く…
でC:\WorkSpace\Python\venv
を選択して作業フォルダを設定し、空のソースファイルを作成します。
作成したらターミナル
→新しいターミナル
でターミナルを開きます。
空のソースファイルの作成はVSCodeの言語モードをPythonにして、ステータスバーにインタープリタ等を表示させるためです。別に作らなくても仮想環境は作成できます。
ターミナルにPython -m venv [仮想環境名]
と入力しエンターキーを押すと、仮想環境がC:\WorkSpace\Python\venv
内に作成されます。
今回はJupyter Notebookを使ってみる用の仮想環境なので名前をJupyter
にします。
作成した仮想環境を適用するかを聞かれますので、ここでyesを押して適用してもよいですが、今回は以下の方法で適用させます。
VSCodeの下の方にあるステータスバーに現在選択されているインタープリタが表示されているのでそこをクリックします。
するとインタープリタを選択する画面が出てくるので先ほど作成したJupyterという名前の仮想環境を選択します。
VSCodeのバージョンによっては現在のインタープリターが表示される位置が異なっている可能性もあります。
メニューバーの表示
→コマンドパレット
でコマンドパレットを開きPython: Select Interpreter
のコマンドからでもインタープリタ選択画面は開けます。
ステータスバーの表示が作成した仮想環境になっているのを確認したら、ターミナル
→新しいターミナル
で新たにターミナルを開きます。
プロンプトの先頭に(Jupyter)
と仮想環境名が表示されているので、仮想環境がアクティブな状態でターミナルが開かれています。
パッケージのインストール
仮想環境の作成に成功したので、作成した仮想環境に早速Jupyterのパッケージをインストールしてみます。
パッケージのインストールや管理を行う際には、pip、condaなどのパッケージのマネージャーを用いるとのことだが、今回はPythonに標準で搭載されているpipを使用します。
参考
はじめに、現状でインストールされているパッケージを表示してみます。
仮想環境がアクティブな状態でターミナルにpip list
というコマンドを入力し実行します。
下の画像のようにパッケージ一覧が表示されますが、「pip」と「setuptools」のみインストールされてることがわかりました。
Jupyterのパッケージをインストールします。pipでインストールを行う際のコマンドはpython -m pip install [パッケージ名]
なのでpython -m pip install jupyter
と入力して実行します。
仮想環境がアクティブな場合、環境変数の先頭に仮想環境のパスが自動追加され、コマンドからPythonを実行する際に仮想環境内のものを優先的に使用するようになるらしいので、上記のPython -m pip
はpip
に置き換えれるらしい。
試しにwhere.exe hoge
※でPythonとpipのexeを探してみると検索結果の一番上に作成した仮想環境のexeのディレクトリが表示されている。
参考
https://endy-tech.hatenablog.jp/entry/how_venv_works_in_python
https://win2012r2.com/2022/02/17/windows-where/
※powershellを利用しているためwhere.exe hoge
だが、コマンドプロンプトではwhere hoge
でよい。powershellでwhere hoge
では動かない。
python -m pip install jupyter
を実行すると大量の文字が表示されますが、しばらくするとパッケージのインストールが終了します。
pip list
で確認してみるとJupyterのパッケージインストールに伴いその他大量のパッケージもインストールされていますが、しっかりJupyterのパッケージがインストールされていることが確認できます。(jupyter-client等もまとめて赤枠で囲んでしまっていますが、jupyter以外はあくまでjupyterってパッケージの機能使うのに必要なパッケージ達です。)
ノートブックを作成してコードを記述してみる。
横道にそれまくっていたので長くなりましたが、VSCode上でJupyter Notebookを使う準備が整いました。
今のままだとカレントディレクトリがC:\WorkSpace\Python\venv
(仮想環境をまとめるようにつくったフォルダ)なので前回作成したC:\WorkSpace\Python\Practice
に設定しておきました。
ノートブック作成
ノートブックを作成するには、サイドバーでエクスプローラーの画面を開き、新しいファイル
からノートブックを作成するか、
コマンドパレットからCreate: New Jupyter Notebook
を実行します。ただしコマンドパレットから作成された際はタブは追加されますがファイルとして保存されていないため必要に応じて保存します。
カーネルの選択
ノートブックを作成したらカーネルを選択します。
カーネルとはノートブックの内容を実行するためのものでノートブック単位でカーネルを設定できる。
作成したノートブックのタブの右上の方にカーネルの選択
というボタンがあるのでクリックしてカーネルを選択する。
今回は今回作成した仮想環境を選択する。
コード、マークダウンの記述と実行
カーネルを選択したのでコードを実行できるようになりました。
コードやマークダウン形式でのメモを記入するのは下の画像で大きな赤枠で囲まれた中にあるセルという部分で、下の画像ではコードを記入するセルとマークダウンを記入するセルが表示されている。
試しにセルにコードを入力して実行してみる。
入力したいセルを選択し、コードを入力します。今回はprint("hello,jupyter")
と入力、セルの内容ははセル左側に表示されるセルの実行
ボタンで実行できる。
今度はマークダウン記法でメモを書いてみる。
先ほどと同様にセルに記述し、セル右側にあるセルの編集を停止
ボタンを押すと入力した内容が表示される。
これでVSCode上でJupyter Notebookを動かせることを確認できましたので、今回はここまで。
Jupyter Notebookの他の機能等を使ってみたら追記します。
【追記】ノートブックをPDFにエクスポートしてみた
Jupyter NotebookにはノートブックをPythonのスクリプトや、HTML、PDFの形式にエクスポートする機能があるので使ってみたいと思います。
私は色々よく読まずに使おうとして、ちゃんとPDFの出力が出来るまでに少し苦労したので何をやらかしてうまく動かなかったのかも含めて整理しました。
参考
使い方
ノートブックを開いているタブの上の方にある「その他の操作…」ボタンから「Export」を選択して変換したい形式を選択します。ダイアログが立ち上がるので保存したい場所を選択してファイル名を入力したら「Export」ボタンを押します。とってもお手軽です。
何も考えず使ってみたらちゃんと動かなかった
jupyterの拡張機能とモジュールを入れておけば一応この機能を実行できる。
ただ、詳しくは後述するがこの機能は変換する処理で他のソフトウェアを利用するため、それらがインストールされていないと変換ができない。下の画像はそれらがインストールされていない状況でエクスポート機能を実行した様子です。エラー通知が出てPDFも出力されていません。
私はそんなことを知らずに変換できずに困っていました。
Jupyter Notebookのログを見てみると、それなりに長いエラーメッセージがありますが、その中に以下のようなメッセージがあります。
英語は苦手なのでなんか嫌な感じがしますが、要するに「XeLaTeX」と「Pandoc」ってソフトウェアが見つからないからインストールしてねって言ってます。
nbconvert.utils.pandoc.PandocMissing: Pandoc wasn't found.
Please check that pandoc is installed:
https://pandoc.org/installing.html
Error 16:56:44: If you have not installed xelatex (TeX) you will need to do so before you can export to PDF, for further instructions go to https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex.
解決方法
必須ソフトウェアのインストール
少し調べてみたらこのノートブックの変換はnbconvertというツールがやってくれているらしく、nbconvertの公式ページを見たら思いっきり必須ソフトの説明が書いてありました。
先ほどのエラー文で言われたように「pandoc」と「XeLaTeX」が必須のようです。(XeTeX処理系で動くLaTeXはXeLaTeX)
なのでインストールしていきましょう。
pandocのインストール
まず、pandocをインストールしていきます。インストールする順番はどっちが先でも問題ありません。
ちなみにノートブック内にマークダウン記法での記載をしたセルがなければインストールしなくても変換はできました。
ちなみにPythonのパッケージとしてpandocという名前のものもあるが、nbconvertで使用されるpandocとは別物。
pip install pandoc
で処理系の環境にこのパッケージをインストールしても勿論nbconvertは機能しない。
pandocとは
pandocとは色んな形式のドキュメントを違う形式のドキュメントに変換してくれるソフトウェアのようです。
nbconvertはpandocを使ってノートブックを一度.tex形式に変換してそこからPDFに変換しているみたいです。
Pandocは、あるマークアップ形式から他の形式へ変換する Haskell ライブラリと、そのライブラリを用いたコマンドラインツールです。
Pandoc は、 Markdown 、 HTML 、LaTeX 、 Word docx など、これに限定されない多数のマークアップとワープロ形式の間で変換することができます。入力および出力形式の完全なリストについては、下記 (options below) の --from と --to を参照してください。 Pandoc は PDF 出力を生成することもできます。下記の creating a PDF を参照してください。
引用:https://pandoc-doc-ja.readthedocs.io/ja/latest/users-guide.html
インストール方法
pandocの公式ページからインストーラーを入手してインストールします。
ダウンロードしたらインストーラーを起動します。
起動したらチェックを入れてライセンスに同意して赤点線の枠で囲んだボタンを押しす。
「Install for all users of this machine」の項目は他のユーザーでもpandocを利用できるようにするかしないかですが、チェック入れるかは使用環境によってでしょうか、私はチェックを入れました。
この画面が表示されたらインストールは完了です。
赤枠の部分にインストールされたディレクトリが表示されています。
これは後で使うので覚えておきます。
pandocのPATHを通す
pandocのインストールは完了しましたが、nbconvertでpandocの機能を利用する際にはpandocのPATHを通しておかないと内部的な処理の際にpandocがインストールされていないと認識されてエラーを吐かれたでPATHを通します。
PATHを手動で通す方法は色々ありますので各自慣れた手法ですればよいと思います。
一例として以下の記事をご参照ください。
「パスを通したい実行ファイルが存在するフォルダのパス」は先程覚えていてインストール完了した際に表示されたディレクトリ(私の場合はC:\Program Files\Pandoc
)です。
コマンドプロンプトを起動して、where pandoc
と入力後実行してディレクトリが表示されたらPATHが通っています。
XeLaTeXのインストール
続けてXeLaTeXのインストールをしていきます。
XeLaTeXとは
細かい説明は省きますが、XeLaTeXというのはTeX言語の処理系であるXeTeX上で動くマクロ体系のようです。
細かいことは以下のページ、サイトの解説がわかりやすかったです。
ディストリビューションを使用してインストールする
とにかくXeLaTeXをインストールしないといけないのですが、処理系をインストールしたりその他必須のマクロ体系をインストールしたりと環境を手作業で一つ一つ整えるのは難しいです。
なので処理系やマクロ体系関連プログラムをインストール、管理などをしてくれるディストリビューションを利用します。
PythonでいうAnacondaです。
TeXのディストリビューションは色々あるらしく、nbconvertの公式ページではWindows向けにMiKTeXを紹介していますが、日本国内ではTeX Liveというものが広く使われているのでこっちを使います。
(詳しくは調べていないがTeX Liveの方が日本語に強そうな印象でググったときに記事の数が多いような印象を受けた。)
TeX Liveはデフォルトでインストールするファイルが多いので私の環境ではインストールに1時間弱かかりました。
pythoの勉強でメインで使っているPCとは別のサブPCでMiKTeXを使ってみたのですが、こっちはインストールはすぐ終わりました。MiKTeXでも問題はないのでここは好みかと思います。
ISOを入手する
TeX Liveのインストールはネットワークインストーラーを使う方法か、配布されているDVD、ISOファイルのローカルインストーラーを使うかがあります。インストールするファイルが多くネットワーク経由だと時間がかかると聞いたのでISOをダウンロードしてインストールします。
(インストールされるファイルが7GB程度でISO自体も4GBあるのでISOをダウンロードする時間考えるとどっちが早いのかどうなのか試してないのでわかりませんが。。。)
詳しくは以下を参照。
ISOは上にリンクを貼ったここのサイトからダウンロードできます。
install-tl-windows.batを起動する
ISOをダウンロードしたら仮想DVDドライブにマウントします。
マウントはWindows7以降なら標準でできるらしい。ISOファイルを開く標準のプログラムがエクスプローラーになっていればファイルをダブルクリックするか、右クリック
→マウント
で開けるし、エクスプローラー以外が標準のプログラムになっていても右クリック
→プログラムから開く
→エクスプローラー
でも開けました。
開いたら中にあるinsrall-tl-windows.bat
を実行してインストーラーを起動します。
インストーラーが起動したら必要に応じてインストール先などをせっていしますが、私はデフォルトのままインストールを実行しました。
インストールを開始するとこんな感じのwindowが現れてインストールが進みます。(展開すると7GBくらい容量があるのでそこそこ時間がかかります。)
無事終了したらこんな画面になるので閉じるを押してインストールは完了です。
一応この段階でPDFの出力はできたのですが、ISOでインストールした際は中身が古い可能性があり諸々をアップデートした方がよいとのことなので作業します。
TeX Liveをインストールすると「TLShell TeX Live Manager(tlshell.exe)」というGUIアプリケーションもインストールされ、これを使えばGUI上でパッケージのインストール、アップグレード等の管理を行えます。
スタートメニュー等から起動すると以下のような画面が出てくるのでファイル
→リポジトリを読み込む
を選択します。
リポジトリが読み込まれるとtlmgr(パッケージ管理ツール、pipのようなもの)のバージョンが最新かどうかと、インストールされているパッケージのアップデート可否などが分かります。
私の画面では最新の状態にアップデートしたばかりなのでグレーアウトしていますが、ISOからインストールした場合は大体tlmgr及び各種パッケージのアップデートが可能だと思いますので、tlmgrをアップデート
でtlmgrを最新にしてからすべてをアップデート
でパッケージを最新にします。
なおこの作業はコマンドラインからtlmgr update --self
とtlmgr update --self --all
を実行しても可能です。
サブPCでの話
MiKTeXでもうまくPDF出力できることを確認した後、メイン環境に合わせるためMikTeXアンインストールしてTeX Liveをインストールしたところ、アップデートの段階でうまくいかず、nbconvertでのPDF変換もできなくなった。
アンインストールしてTeX Live 2022のISOからインストールしてそのままの状態でやってみたらうまくPDFに変換しできました。
これについては私がうまくアップデートできなかったのかもよく理解していないので今後どうにかしたい。
参考
変換してみる
要求されているものをインストールしたので変換を再度やってみたところ、日本語が抜けているがそれ以外は問題なくPDFに出力された。
日本語出力に対応させる
サブPC環境では特段設定せずに日本語出力が何故かできてしまったのですが、通常はnbconvertで日本語が含まれたノートブックをPDFにするには設定ファイルを少し編集する必要があるようです。
メイン環境ではもちろん上記のように日本語が出力されていなかったので設定をしてみます。
参考
まずは編集すべき設定ファイルを探します。
VSCodeで仮想環境フォルダ(私はC:\WorkSpace\Python\venv\Jupyter
)を開き、documentclass
と検索すると検索結果がずらずらと出てきます。
編集するのはindex.tex.j2
というファイル名で内容は以下のようになっているはずです。
私はC:\WorkSpace\Python\venv\Jupyter\share\jupyter\nbconvert\templates\latex\index.tex.j2
にありました。
((=- Default to the notebook output style -=))
((*- if not cell_style is defined -*))
((* set cell_style = 'style_jupyter.tex.j2' *))
((*- endif -*))
((=- Inherit from the specified cell style. -=))
((* extends cell_style *))
%===============================================================================
% Latex Article
%===============================================================================
((*- block docclass -*))
\documentclass[11pt]{article}
((*- endblock docclass -*))
ファイルを見つけたらファイルをコピーしてリネームしておくなどで念のためバックアップをとってから上記の16行目の記述を以下のように書き換えて保存します。(VSCodeの検索画面でindex.tex.j2
をクリックしたらエディタが開くのでそのまま編集できました。)
\documentclass[11pt]{article}
↓
\documentclass[a4paper,xelatex,ja=standard]{bxjsarticle}
ファイルを保存してから再度PDFを出力してみたら今度はしっかりと日本語も表示されています。
以上で設定は終了です。先ほどのファイルを編集することで日本語のフォント等も選択できるようですが、私は現状でとりあえず満足なので詳しくは参考先のページを参照してください。