Pandas が消えた😱
先日macOSの update があったので、しばらく放置してあった Python のパッケージ/モジュールもこの際に新しくしておこうと思って Homebrew で upgrade しました。
ところが、その後は python3 で import pandas as pd
と打ち込んでも ModuleNotFourdError
が出て止まっちゃう。Jupyter Notebook も立ち上がらない😭
原因: 今回は Python 本体も upgrade されていた
今回の brew upgrade では、モジュールだけではなく、Pyton 本体も、Python 3.7.3 -> 3.8.5 に version up されていました。
その結果、terminal から python3
と打込むと、昨日までの Python 3.7 ではなくて Python 3.8 が起動されます(*1)。Python 3.8 の下にある モジュール置場は当然まだ空っぽですから、pandas など住んでいるはずもなく🍃
(*1) IDE から project を開こうとすると、そもそも 「python が無いぞ!」と言われる場合がありますが、これも同様の事情です。その project で使う Python を改めて設定すれば解決!
対応: module の引っ越し
そこで、旧宅 3.7 の モジュール置場からモジュールを持って来ることにします。このとき directory ごとコピペしても行けそうですが、そうするとそれが原因で何かマズい副作用が出そうな気もするので、ここは真面目にコマンドを打って丁寧に引っ越しすることにします。
🐱引越しの手順
- 旧宅 Python 3.7 と新居 3.8 のモジュール置場をつきとめる
- 旧宅 3.7 の引越しリストを作る(pip freeze)
- 新居 3.8 にリストのモジュールをインストール(pip install -r)
- 仕上げの update
- 引越し完了🍣🍻
1. モジュール置場をつきとめる
そもそも、モジュールはどこに置いてあるのか?
もちろん、Python の中から import sys
then sys.path
などとやっても良いのですが、それだと複数の directory がずらずらっと画面上に並ぶことになり、どれが本家かわかりにくい。
そこで、terminal から pip3 -V
と打ち込んで pip3 の version 情報とモジュール達の居場所を教えてもらうことにしました(Script 1)。
% pip3 -V pip 20.2.3 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
これを手がかりに、ご近所の様子を finder で見ると Fig.1 のような感じです。Python 3.7 は Python 3.8 のすぐ上に居るし、よし、様子は大体わかった👍
2. 旧宅 3.7 の引越しリストを作る
状況がわかったところで、pip3 の引っ越しリストを作ります。もっとも、そのまま pip3 freeze
とやっても新居の空っぽなリストができるだけですから、さっきの居場所情報を基に、数字の 3.8 を 3.7 に変えて、こんな感じで引越しリストを作ります(Script 2)。
Script 2: 引っ越しリスト作成(*2)
% python3 /usr/local/lib/python3.7/site-packages/pip freeze > kuroneko_yamato.txt
(*2)このscriptだと、引っ越しリスト kuroneko_yamato.txt は作業ディレクトリ(current directory)に作られます。
3. 新居 3.8 にmodulesをインストールする
新居へのインストールは単にpip3 -r install
を使っても良い(これで黙っていても新居のpipが起動するから)のですが、Script 2 と見た目を揃えた方が気分が良いのでこんな感じで(新居なので数字の部分は 3.8 です)(Script 3)。
% python3 /usr/local/lib/python3.8/site-packages/pip install -r kuroneko_yamato.txt
4. 仕上げのupdate
これでだいたい出来上がりなのですが、なにぶん旧居のリストに基づいて作業したので、気分一新のため インストールされているモジュールを一括して update しておきます(Script 4)。
#全部をまとめてアップデート(*3) pip3 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install -U
(*3) Source: stackoverflow How to upgrade all Python packages with pip? スレッドの rbp さんの回答(オリジナルの pip
を pip3
に変えてあります。)
Enjoy!