Colab にインストールしたパッケージは消える
😸 Colab への pip インストールは簡単
Google Colab には大概のパッケージ/モジュールがプレインストールされているので、何も考えずに import foobar
するだけで、pandas だろうが numpy だろうが何の問題もなく快適に使うことができます。
しかし、先週、同じ調子で MeCab を import しようとしたら、ダメでした。驚くべきことに、 MeCab がプレインストールされていない。
そこで、 Colab に MeCab をインストールことにしました。きっと普通に pip でインストールできるに違いないと、!pip install mecab-python3
とやってみたところ、何の問題もなくインストールされ(Script 1)、スクリプトもちゃんと走る🍻
Script 1 モジュールを Colab にインストールするのはいつも通りで OK
!pip install mecab-python3 Collecting mecab-python3 Downloading https://files.pythonhosted.org/packages/87/03/63ec82bf1b2ae8eb641ba77e95ea3bc40261c4d064147055b8fac4a76d15/mecab_python3-1.0.0-cp36-cp36m-manylinux2010_x86_64.whl (3.5MB) |████████████████████████████████| 3.5MB 2.7MB/s Installing collected packages: mecab-python3 Successfully installed mecab-python3-1.0.0
その後も快適に使えていたのですっかり油断していたところ…。
🙀 モジュールが消えた!
ところが、翌日 Colab でnotebookを開いて作業を開始したところ、いきなり「そんなモジュールは知らん!」のエラー(Script 2)。
import MeCab --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-2-022fc4ee216d> in <module>() ----> 1 import MeCab ModuleNotFoundError: No module named 'MeCab' --------------------------------------------------------------------------- NOTE: If your import is failing due to a missing package, you can manually install dependencies using either !pip or !apt. To view examples of installing some common dependencies, click the "Open Examples" button below. ---------------------------------------------------------------------------
要は、Runtime 再起動か何かのタイミング(正確なところは調べていません…)で、ユーザーが追加インストールしたパッケージ等は消去されるようです。
Google Drive にインストールしたパッケージは消えない
ではどうするか。
当たり前ですが、自分のDriveにインストールしたパッケージ/モジュールは消えません👍
そこで、Google Drive にモジュール置場をつくり、そこにモジュールをインストールしておいて、 Colab から読みに行かせることにしました。
以下、その手順です(Script 3)。
Google Drive に pip install でモジュールをインストールし、 Colab から使う手順
- Google Drive に自分専用モジュール置場を作る
Colab の Notebook を ‘Save a copy in Drive’ すると Google Drive の MyDrive(*2) に自動的にできる Colab Notebooks というディレクトリの下に my-modules というディレクトリを作り、ここを自分専用モジュール置場とすることにしました(*2)。 - 自分専用モジュール置場にモジュールを pip installする
次に、 Colab に戻って pip の install コマンドを入力し、自分専用モジュール置場に MeCab (でもなんでも好きなもの)をインストールします。このとき、--target
option を付けるのがポイントです。 - Python に自分専用モジュール置場の場所を教えてあげる(毎回)
sys.path.append()
で自分専用モジュール置場の場所を Python に教えてあげます。上記の1, 2と違って、この操作は Colab を立ち上げるたびに行う必要がありますが、notebook に書いておけば済む話なので問題になりません。
(*1) 以前は ‘My’ と ‘Drive’ の間に space が入っていたのですが、いま見たら space が取れて ‘MyDrive’ に変更されていました。以下の Script 3 も、Google が行ったこの変更を反映させて修正してあります。修正前の script を使うと error になるので、以下の修正版をお使いください。(Update: 2020-12-08)
(*2) Google Drive 上であればどこに置いても構いませんが、あまり変なところに置くのもアレなのでここにしました。
あと、これは言わずもがなかも知れませんが、自分の Google Drive はあらかじめ Colab 側から mount しておいてください(← それさぁ、はやく言ってよ〜😾)。
Script 3 Google Drive にモジュールを置いて Colab から読みに行く
# Step 1: Google Drive に自分専用モジュール置き場を作る ## Google Drive に MyDrive/Colab Notebooks/my-modules というデイレクトリを ## 作った場合、Colab から見たこのディレクトリは、 ## /content/drive/MyDrive/Colab Notebooks/my-modules ## となります。 ### でも、'Colab' と 'Notebooks' の間にスペースが入っているのが気になりますね…。 # Step 2: 自分専用モジュール置き場にモジュールを pip install する ## 次に、 Colab に戻って次のコマンドを入力し、自分専用モジュール置き場に ## MeCab(でもなんでも好きなもの)をインストールします。 !pip install --target /content/drive/MyDrive/Colab\ Notebooks/my-modules mecab-python3 ### Colabと Notebooks の間に space が入っているので、 ### \ (backslash)でエスケープしておかないとエラーになります。 # Step 3: Python に自分専用モジュール置場の場所を教えてあげる(毎回) ## ここまで準備が整ったら、 import sys sys.path.append('/content/drive/MyDrive/Colab Notebooks/my-modules') ## とやって、自分専用モジュール置き場の場所を Python に教えてあげます。 ### こちらは Step 2 の場合とは違って、path を文字列として扱っているので、 ### 親切のつもりで間の space をエスケープしてしまうと、存在しない場所に ### pathを通したことになってしまい、import <module name> の段階で ### エラーになってしまいます。
Enjoy!