
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 (でもなんでも好きなもの)をインストールします。このとき、--targetoption を付けるのがポイントです。 - 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!