Google Colaboratory でカスタムモジュールをインポートする
手順
1. Google Drive を Mount
from google.colab import drive drive.mount('/content/drive')
2. sys.path.append() でパスを通してインポート
例として次のようなファイル構成になっているとする。
- My Drive
- Colab Notebooks
- ML
- workspace
- my_module
__init__.py
my_utils.py
- my_toolbox
__init__.py
visualizer.py
- my_module
- workspace
- ML
- Colab Notebooks
※「My Drive」が Google Drive のルートディレクトリ
このファイル構成で カスタムモジュール「my_module」を import するには次のように sys.path.append()
でモジュールの親ディレクトリまでのパスをシステムに伝える必要がある。
import sys ROOT_PATH = 'drive/My Drive/Colab Notebooks/ML/workspace/' sys.path.append(ROOT_PATH) import my_module
これで ModuleNotFoundError: No module named 'my_module'
のようなエラーが出なければおけまる。
モジュール my_module の中のライブラリ my_utils やさらにその中のメンバーを使いたければたとえば次のように書く。
from my_module import my_utils from my_toolbox.visualizer import hoge
visualizer.py
def hoge(): print('hoge!')
モジュールの変更を反映する
Google Drive を再度マウントする必要がある。 Google Colaboratory のメニュータブから「Factory reset runtime」を選択し、ランタイムをリセットする。 そしていつものようにマウントするためのコードを実行すれば良い。
from google.colab import drive drive.mount('/content/drive')
認証コードを入力してマウントが完了すれば、変更が反映されているはずだ。
ここで注意したいのは、単なる再起動 (Restart) では drive.mount('/content/drive')
を実行しても Google Drive が再読み込みされないことである。その場合、認証コードを求められることなく以前の状態のドライブが適用されてしまう。
その他、強制マウントや importlib.reload
を試してみたが駄目だった。
駄目な例1:強制マウント
drive.mount('/content/drive', force_remount=True)
駄目な例2:importlib.reload
import importlib importlib.reload(module_name)