こんにちは。のっくんです。
この記事では、Jupyter Notebookで自作のモジュール(.py)をインポートして使う方法を紹介します。
[toc]Jupyter Notebookとは
Googleさんで検索すると以下のように出てきます。
Jupyter Notebook(ジュピターノートブック)とは、ノートブック形式で段階的にプログラムを実行し、データ分析作業を行える対話型ブラウザ実行環境です。
機械学習や画像処理の本では必ずと言っていいほどジュピターノートブックを使っています。
実行できるプログラムはPythonですが、ジュピターノートブックの拡張子は「.ipynb」です。
ジュピターノートブック(.ipynb)で自分の作ったモジュール(.py)をimportする時に少しつまづいたので、その手順をまとめておきます。
ちなみに、通常のPythonのimportについては以下の記事にまとめてあります。
https://ymgsapo.com/about-import/
ディレクトリ構成
コードを書く前に、ディレクトリの構成を確認しておきます。
Pycharmのプロジェクトの下にnotebookというディレクトリを作っています。

test.ipynbからhellomod.pyをインポートしたいと思います。
モジュール検索パス
インポートする前に、モジュール検索パスを理解する必要があります。
6.1.2. モジュール検索パス(原文)
spam
という名前のモジュールをインポートするとき、インタープリターはまずその名前のビルトインモジュールを探します。見つからなかった場合は、spam.py
という名前のファイルをsys.path
にあるディレクトリのリストから探します。sys.path
は以下の場所に初期化されます:
- 入力されたスクリプトのあるディレクトリ (あるいはファイルが指定されなかったときはカレントディレクトリ)。
PYTHONPATH
(ディレクトリ名のリスト。シェル変数のPATH
と同じ構文)。- インストールごとのデフォルト。
https://docs.python.jp/3/tutorial/modules.html
まぁ色々書いてありますが一言で言うと、
sys.pathにあるディレクトリからしかモジュールをインポートできない
ってことです。
sys.pathって何やねんと思って中身をみて見ると、
test.ipynb
import pprint import sys pprint.pprint(sys.path)
実行結果
['', '/Users/haru/PycharmProjects/exp/notebook', '/Users/haru/anaconda3/envs/experiment/lib/python37.zip', '/Users/haru/anaconda3/envs/experiment/lib/python3.7', '/Users/haru/anaconda3/envs/experiment/lib/python3.7/lib-dynload', '/Users/haru/anaconda3/envs/experiment/lib/python3.7/site-packages', '/Users/haru/anaconda3/envs/experiment/lib/python3.7/site-packages/IPython/extensions', '/Users/haru/.ipython']
一番上を見ると、’/Users/haru/PycharmProjects/exp/notebook’ってありますね。
つまりnotebookディレクトリ配下のファイルしか見えてないってことになります。

このままだと
hellomod.pyをインポートすることができない
ので、以下のコマンドでexp配下のパスを追加しましょう。
test.ipynb
sys.path.append('/Users/haru/PycharmProjects/exp')
モジュールのインポート
モジュールの中身は以下の通り。
hellomod.py
def method(val): print(val)
引数をプリントするだけのものです。importして実行してみましょう。
test.ipynb
import hellomod hellomod.method("done")
上手くいけば、Jupyter Notebook上で”done”と表示されます。