pip freezeでバージョン情報まで入るのがうざいから除去するぞ!

何故かpip freezeのオプションにはバージョン情報を削除するような機能は実装されていません。確かにバージョン情報があると便利っちゃ便利なんですが、心機一転全てのモジュールを最新版にしたるで!って時にクソ面倒なので、これを消すスクリプトを書きましょう!

pipって便利だけど不便というか、一括でアップデートとかそういう需要に答える気が0なので、手動で一個一個頑張りましょう~って感じでぶん投げられています。

やりたいこと

pip freezeって入力すると、下みたいな画面が出るじゃないですか。

ずらずらっとpipで管理されているモジュールの一覧が出てくるんですが、altgraph==0.15みたいなのがバージョンです。

んでまあ、Pythonのバージョン入れ替えのときとか、引っ越しするときとか、バックアップ用で一覧をテキストファイルへ落とし込むために下のコマンドとかも使いますよね。


pip freeze > Desktop\requirements.txt

これをpipで読み込むにはinstall -rオプションを使います。


pip install -r Desktop\requirements.txt

これで簡単にモジュールも引っ越しできるんですが、バージョン情報があると最新版に入れ替えてくれないんですね。そしてそれを抑止するオプションも無いみたいです。

↑ならおkな訳です。1行ずつ手動で消すのも少量なら十分ありです。もしくは普通に単体ずつアップデートするか。下のコマンドですね。


pip install --upgrade モジュール名

まあこれが10個とか20個になって来ると頭がおかしくなって死ぬのでPythonで自動化しようという趣旨です。

ソースコード


import os

file_name = "requirements.txt"
working_space = os.path.join(os.path.expanduser("~"), "Desktop")

os.chdir(working_space)

def gen_file():
    row = ""
    try:
        with open(file_name, mode="rt", encoding="utf-8") as f:
            for r in f.readlines():
                try:
                    idx = r.index("=")
                    row += r[:idx] + "\n"
                except ValueError:
                    row += r
        with open(file_name, mode="wt", encoding="utf-8") as f:
            f.write(row)
    except FileNotFoundError:
        print(f"{os.path.join(working_space, file_name)}が見つかりませんです!")
        exit(1)
        
gen_file()

これを実行すると、requirements.txtが一皮剥かれます…w

やっていること

ユーザ名\Desktop\requirements.txtにあるrequirements.txtから、==1.0.0みたいなモジュールのバージョン情報を消します。
削除したrequirements.txt読み込むことで、全て最新版のモジュールが読み込めるわけですね。万歳!

コメントを残す

メールアドレスが公開されることはありません。