pipパッケージのインストールパスを表示するシェルスクリプトを作った

こんにちは、kisseです。
最近行ってるインターン先のサーバーで、pythonがパッケージを探しに行くパスとpipでパッケージをインストールする場所が違う問題に直面してます。

この問題の調査のため全てのpip packageがインストールされているパスを出力するシェルスクリプトを書くことにしました。

今回は作成したシェルスクリプトの共有をします。



pip packageのインストールパスを表示するコマンド

pip show <pkg-name>でパッケージに関する様々な情報を得る事ができます。

その中のLocationで始まる行にインストールパスが表示されています。

この行をgrepコマンドで抽出することにしましょう。
pip show <pkg-name> | grep Locationで、インストールパスが記載されている行のみを抽出する事ができます。

インストールされているパッケージ名のみを出力するコマンド

pip listコマンドを使うとインストールされているパッケージ名のバージョンが出力されます。

しかし、この情報にはヘッダ部とバージョンが余計です。

これらを取り除くようにコマンドを記述して行きましょう。

まずは上2行のヘッダ部を取り除きましょう。
tail -n +3で3行目から下を表示する事ができます。

次に、バージョンを取り除きましょう。
cutコマンドを使うと列方向の抽出処理ができます。
pip listの表示では、パッケージ名とバージョンの間はスペースで区切られています。

cutコマンドで、スペースを区切り文字に設定して、1番目の要素であるパッケージ名を取得することにしましょう。
cut -d ' ' -f1でそのような記述ができます。

これらの処理をパイプラインで繋いで、
pip list | tail -n +3 | cut -d ' ' -f1とします。

これでインストールされているパッケージ名を順番に出力することができます。

パッケージ名を1つずつpip showコマンドに渡す

シェルスクリプトではwhile文などの制御構文が使えます。
今回はパッケージ名を1つずつ変数pkgに受け取り、pipパッケージのインストールパスを表示するコマンドに渡しましょう。

pip list | tail -n +3 | cut -d ' ' -f1 | while read pkg
do
  pip show $pkg | grep Location
done

以上のスクリプトを実行することで、pipパッケージのインストールパスをまとめて確認することができます。



おわり

結果、僕が触ってたサーバーではパッケージのインストール箇所が2箇所に分かれてしまっていることが確認できました。
これくらいならPYTHON_PATHをいじるなり、コードの中でPythonにパッケージを見に行かせるようにすれば良いという結論に達しました。

こういった簡単な処理をシェルスクリプトでさくっとかけるようになると便利ですね。

最後まで読んでいただきありがとうございます!

あわせて読みたい