うっかりpip installのお掃除を簡単に! pip freezeを自動的に記録しよう

(更新

pip install and pip freeze are simplified with this script, which automatically backs up package lists. Detailed setup and usage instructions help you avoid accidental installs.

A flat and minimalist illustration with soft, muted color tones, featuring a calm, simple background. The scene depicts a person sitting at a desk, using a computer with 'pip install' and 'pip freeze' displayed on the screen. Around the computer are file icons labeled 'before' and 'after,' symbolizing backup files. The overall atmosphere is relaxed, with the person looking focused and content, representing a sense of confidence in the backup process. The background is clean and subtle, with an emphasis on the technological task. Illustrated by ChatGPT and DALL-E.

相模原市で IoT 設計を受託しているファームロジックスです。

今回は Python pip によるパッケージ管理の話です。ちょっと便利なスクリプトを書いてみました。皆様のお役に立てれば幸いです。

pip install で困ったことはありませんか?

Python プロジェクトの開発では、pip を使ったパッケージ管理が不可欠です。しかし、pip install 実行時に、環境の状態を記録しておくことは意外と手間です。「pip install の前には、pip freeze を実行しておきましょう!」という提案は良くみますが、大抵は何気なく pip install で大量の依存パッケージをインストールしてしまい、「このパッケージは要らないかなあ」と思ってから、pip uninstall で途方にくれる、というのが日常ではないでしょうか。

今回、私はその手間を解消するために、pip install の前後で pip freeze を自動的にバックアップ(記録)するシンプルなラッパースクリプトを作成してみました。新しいコマンドの利用を強制する訳ではなく、普段使っている pip install コマンドを自動的にラップする、というのがポイントです。本記事では、その概要と導入手順について紹介します。

スクリプトの実装概要

今回のスクリプトでは、pip install コマンドを Bash あるいは Zsh の関数定義でラップし、インストール前後のパッケージリストを pip freeze 出力の形で自動的に保存します。さらに、pyenv を利用している場合には、インストール時の Python バージョンと virtualenv も記録することが可能です。このスクリプトの詳細なコードは、GitHub リポジトリにて公開させて頂きましたので、ぜひご参照ください。

セットアップ方法

セットアップは非常にシンプルです。まず、GitHub リポジトリからスクリプトをダウンロードし、ホームディレクトリに保存します。次に、~/.bash_profile または ~/.zshrc にスクリプトを読み込む設定を追加します。以下に例を示します。

# Import pip freeze backup script
if [ -f "$HOME/.pip_freeze_backup.bash" ]; then
  source "$HOME/.pip_freeze_backup.bash"
fi

設定後、source ~/.bash_profile もしくは source ~/.zshrc を実行して反映させれば、準備は完了です。

実行例と使い方

セットアップ後は、通常通り pip install コマンドを実行するだけで自動的にバックアップが作成されます。バックアップは、タイムスタンプ付きのファイルに保存され、インストール前後の状態を簡単に確認できます。以下は、実際の実行例です。

$ pip install requests
pip freeze (before install) backed up to /home/user/pip_freeze_backup/20240929_123456_before.txt
pip freeze (after install) backed up to /home/user/pip_freeze_backup/20240929_123456_later.txt

バックアップファイルには、実行した pip install コマンドの引数、インストール前のパッケージリスト、pyenv バージョン情報(利用している場合)、そしてインストール後のパッケージリストがそれぞれ記録されます。

 注意点

このスクリプトは pip install コマンドのみに対応しており、他の pip コマンド(例: pip uninstall, pip list など)はそのまま実行されます。また、pyenv を利用している場合には、インストール前の Python バージョンがバックアップに記録されます。スクリプトのカスタマイズも容易なので、必要に応じてディレクトリ名やファイル名のフォーマットを変更することが可能です。

終わりに

実は当初、このようなツールの要求は多いだろうから、きっと既存の実装があるに違いないと思って探してみました。次のような議論はありましたが、あまり盛り上がっておらず、pip コマンド自体にそのような機能が追加される見込みはなさそうです。

また、既存の便利ツールを見つけることもできませんでした。まあ、このようなラッパーを書くには大した技術は要らないので、みんなこっそり書いて利用しているのだろう、と思います。

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。必ず返信致しますが、時々アドレス誤りと思われる返信エラーがございます。返答が届かない場合、大変お手数ではございますが別のメールアドレスで督促頂けますと幸いです。
2024年9月30日 カテゴリー: Python

コメントを残す