pip freezeの使い方!requirements.txtの作成とlistとの違い

pip freezeの使い方!requirements.txtの作成とlistとの違い

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:3,563

Python環境のパッケージ移行に必須のコマンド「pip freeze」の使い方を初心者向けに解説します。requirements.txtの作成方法から、別環境への一括インストール方法、よく似たコマンド「pip list」との違い、不要なパッケージを除外する応用テクニックまで紹介します。

Pythonユーザにお勧めの本 ↗

初心者向け

1週間でPythonの基礎が学べる本

難易度
実用性
読みやすさ

「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。

PythonPython [パイソン]汎用プログラミング言語での開発中、「別のPCでも同じプログラムを動かしたい」「本番環境にデプロイしたい」という場面に必ず遭遇します。 その際、現在の環境にインストールされているライブラリ(パッケージ)をそのまま別の環境へ引き継ぐために活躍するのが pip freeze コマンドです。

本記事では、pip freezeの基本的な使い方から、requirements.txtを用いた環境の再現手順、そして混同されがちなpip listとの違いまでを分かりやすく解説します。

pip freezeとは?

pip freezeは、現在のPython環境にインストールされているパッケージと、そのバージョンの一覧を出力するコマンドです。 出力されるフォーマットがそのまま「インストール用の設定ファイル」として使える形式(パッケージ名==バージョン)になっているのが最大の特徴です。

単にターミナル(コマンドプロンプト)で実行すると、以下のように画面に一覧が表示されます。 なお、出力されるパッケージ名は アルファベット順(大文字小文字を区別しない) で自動的にソートされます。

実行例
pip freeze
出力結果
certifi==2023.7.22
charset-normalizer==3.3.2
idna==3.6
requests==2.31.0
urllib3==2.1.0

requirements.txtを作成して環境を移行する手順

pip freezeの最も代表的な使い道は、requirements.txt の作成です。 このファイルを使って、別のPCやサーバーに同じパッケージ環境を構築する手順を解説します。

ステップ1:現在の環境のパッケージリストを書き出す

ターミナルで以下のコマンドを実行し、pip freezeの出力結果を requirements.txt というファイルに保存(リダイレクト)します。

ファイル出力
pip freeze > requirements.txt

このコマンドを実行すると、現在のディレクトリに requirements.txt が作成されます。中身を見ると、先ほど画面に表示されたパッケージ一覧がそのまま保存されていることが分かります。

ステップ2:別の環境で一括インストールする

作成した requirements.txt を、環境を移行したい別のPCやサーバーにコピーします。 移行先の環境で以下のコマンドを実行すると、ファイルに記載されているすべてのパッケージが指定されたバージョンで一括インストールされます。

一括インストール
pip install -r requirements.txt

この2つのステップで、インストールされているPythonパッケージの構成を別の環境に再現できます。

注意:ローカルパスやGitからのインストールが含まれる場合

開発中に pip install -e . のような「エディタブルインストール(Editable install)」を行っていたり、GitGit [ギット]ソースコードの変更履歴を管理する分散型バージョン管理システムリポジトリから直接インストールしたパッケージが存在する場合、pip freeze の出力は以下のようになります。

  • -e file:///path/to/pkg
  • パッケージ名 @ git+https://...

この状態の requirements.txt を別のPC(パスが異なる環境)へ持っていくと、指定されたローカルパスが存在せずインストールに失敗することがあります。そのため、別環境へ移行する前に該当行を削除するか、PyPIからインストール可能な通常のバージョン指定に書き換える必要がある点に注意してください。

[!TIP] 「@ file:///」などのローカルパス混入を防ぐスマートな解決策 Anaconda環境やエディタブルインストールの影響でパスが混入してしまう場合、代わりに pip list --format=freeze > requirements.txt コマンドを使用するのがおすすめです。 これにより、ローカルパスに変換されず、綺麗に「パッケージ名==バージョン」の形式で均質な出力が得られます。

pip freeze と pip list の違い

インストールされているパッケージを確認するコマンドとして、pip list もよく使われます。 両者は似ていますが、「機械向け/人間向け」という単純な違いではなく、用途と出力形式によって使い分けられます。

コマンド主な用途特徴
pip freezerequirements.txtの作成・環境再現requirements形式で出力される
pip listインストール済みパッケージの確認表形式で人間が見やすい

pip list の特徴

pip list はデフォルトでは、人間が目視で確認しやすい表形式で出力されます。

pip listの出力例
Package Version
------------------ ---------
certifi 2023.7.22
charset-normalizer 3.3.2
idna 3.6
requests 2.31.0
urllib3 2.1.0

また、pip list --outdated を使うと、アップデート可能なパッケージのみをリストアップすることもできます。 「今何が入っているか確認したい」時は pip list、「環境を別へ移行したい」時は pip freeze と覚えておきましょう。

注意点:不要なパッケージまで出力されてしまう場合

pip freeze は、現在の環境に入っているパッケージを出力します。

[!WARNING] デフォルトで除外されるパッケージの仕様変更(Python 3.12以降) Python 3.11以前では pipsetuptoolswheel などがデフォルトで除外されていましたが、Python 3.12以降では pip のみが除外される仕様に変わっています。 そのため、Python 3.12以降の環境では、デフォルト状態であっても setuptools などが出力に含まれる点に注意してください。

ここでの注意点として、pip freeze「直接インストールしたパッケージ」と「それに伴って自動インストールされた依存パッケージ」を区別しません。 そのため、直接プロジェクトで使っていないパッケージ(他のプロジェクト用にインストールしたものや、間接的な依存関係)まで全て requirements.txt にフラットに列挙されてしまいます。

[!NOTE] 「Manifest(宣言)」と「Lockfile(固定)」という考え方
なぜ不要に見えるパッケージまで出力されるのでしょうか?それは用途の違いによるものです。

  • Manifest(宣言):人間が「このプロジェクトではこれを使いたい」と意思表示するための依存関係定義。
  • Lockfile(固定):機械が本番環境などを「完全に同じ状態で再現」するための全バージョン固定定義。

pip freeze は、環境を完全に複製するための Lockfilerequirements.lock など)を作る用途に適しています。一方、人間が管理する Manifestrequirements.txt)を作りたい場合は、次に紹介する pipreqs を使うか、手動で本当に使っている依存だけを記述するのが一般的です。

こうした意図しないパッケージの混入を防ぐためには、仮想環境(venvなど) をプロジェクトごとに作成し、クリーンな環境で開発を行うのがベストプラクティスです。

応用テクニック:ソースコードから必要なパッケージだけを抽出する

「すでに色々なパッケージが入ってしまった環境から、本当にこのコードで使っている(importしている)パッケージだけを抽出したい」という場合は、外部ツールの pipreqs が便利です。

pipreqs の使い方

まず pipreqs をインストールします。

Terminal window
pip install pipreqs

その後、プロジェクトのディレクトリを指定して実行します。(カレントディレクトリの場合は .

Terminal window
pipreqs .

これで、ソースコード内の import 文を解析し、必要なパッケージを記載した requirements.txt を自動生成してくれます。

pipreqs の限界(注意点)

pipreqs はソースコードの import 文を静的に解析する仕組みです。そのため、以下のようなケースでは正しくパッケージを検出できない(あるいは誤検出する)ことがある点に注意が必要です。

  • importlib.import_module() などを使った動的なインポート
  • パッケージ名とインポート名が異なるケース(例:インストール時の名前は Pillowopencv-python だが、コード上は import PILimport cv2 と書く場合など)

完璧ではないため、生成された requirements.txt の中身を一度目視で確認することをおすすめします。

まとめ

本記事では、Pythonの環境構築に欠かせない pip freeze について解説しました。

  • pip freeze > requirements.txt で現在の環境をファイルに書き出す
  • pip install -r requirements.txt で別の環境に一括インストールする
  • 閲覧目的の pip list と、環境再現目的の pip freeze は使い分ける
  • 本当に必要なものだけを抽出したい場合は pipreqs も検討する

Python開発において環境の引き継ぎや共有は日常茶飯事です。ぜひ pip freeze をマスターして、スムーズな開発を進めましょう!


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Pythonユーザにお勧めの本 ↗

初心者向け

1週間でPythonの基礎が学べる本

難易度
実用性
読みやすさ

「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。

人気記事


記事を評価

Thanks!
目次
Scroll to Top