どうも、Shinyaです。
この記事では、Pythonでrequirements.txtを使用して依存ライブラリを一括でインストールする方法について書いていきます。
Pythonでは、依存ライブラリをインストールする際には、基本的に次のようにpipコマンドを実行します。
pip3 install requestsたしかに、上記のコマンドでも依存ライブラリのインストールは可能ですが、使用する依存ライブラリが5個や10個などに増えた場合には個々の依存ライブラリに対してインストールコマンドを実行するのは非常に手間です。
また、自分以外の開発者にプロジェクトのセットアップをしてもらう際にも、開発者に対してREADME等のドキュメントで特定のバージョンのライブラリを使用するように注意書きをすることはできますが、それを読んだ開発者が正しく内容を理解して実行できるかは完全に運頼みで、想定した依存ライブラリを正しくインストールできずに開発を開始できない可能性が高くなります。
こうした厄介な問題をrequirements.txtがスマートに解決してくれます。requirements.txtを使用すると、プロジェクトのセットアップに必要な依存ライブラリとバージョンを一度だけ設定さえすれば、誰でもコマンド一つでPythonプロジェクトのセットアップを完了させることができるようになります。
requirements.txtをPythonプロジェクトに作成
それでは、早速requirements.txtをPythonプロジェクトに作成します。requirements.txtは任意のディレクトリに作成することが可能ですが、基本的には次のようにPythonプロジェクトのルートディレクトリに作成すれば大丈夫です。
.
├── main.py
└── requirements.txtrequirements.txtに依存ライブラリの情報を定義
次に、requirements.txtにPythonプロジェクトのセットアップに必要な依存ライブラリの情報を定義していきます。
次のような形式で作成します。
# バージョン指定なし(常に最新版を使用)
yfinance
# バージョン指定あり
requests == 2.32.5 # 常に2.32.5を使用する
beautifulsoup4 >= 4.14.3 # 4.14.3以上を使用する上記はあくまでも例ですが、バージョン指定をしない場合と、バージョンを指定する場合で使い分けることができ柔軟な定義が可能です。Pythonプログラムと同様にコメントも使用することができます。
requirements.txtを使用して依存ライブラリを一括インストール
ここまでの工程でrequirements.txtの準備ができたら、あとは次のコマンドを実行するだけです。コマンド実行時のカレントディレクトリからrequirements.txtへの相対パスまたは絶対パスを指定してください。
pip3 install -r ./requirements.txt上記のコマンドを実行すると、次の例のようにrequirements.txtに定義した依存関係が一括でインストールされることを確認できます。また、既にインストール済みのライブラリについてはスキップされます。
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: yfinance in /user/Library/Python/3.9/lib/python/site-packages (from -r ./requirements.txt (line 2)) (0.2.66)
Requirement already satisfied: requests==2.32.5 in /user/Library/Python/3.9/lib/python/site-packages (from -r ./requirements.txt (line 5)) (2.32.5)
Collecting beautifulsoup4>=4.14.3 (from -r ./requirements.txt (line 6))
Using cached beautifulsoup4-4.14.3-py3-none-any.whl.metadata (3.8 kB)
Requirement already satisfied: charset_normalizer<4,>=2 in /user/Library/Python/3.9/lib/python/site-packages (from requests==2.32.5->-r ./requirements.txt (line 5)) (3.4.3)
Requirement already satisfied: idna<4,>=2.5 in /user/Library/Python/3.9/lib/python/site-packages (from requests==2.32.5->-r ./requirements.txt (line 5)) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /user/Library/Python/3.9/lib/python/site-packages (from requests==2.32.5->-r ./requirements.txt (line 5)) (1.26.20)
Requirement already satisfied: certifi>=2017.4.17 in /user/Library/Python/3.9/lib/python/site-packages (from requests==2.32.5->-r ./requirements.txt (line 5)) (2025.8.3)
Requirement already satisfied: pandas>=1.3.0 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (2.1.4)
Requirement already satisfied: numpy>=1.16.5 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (1.26.4)
Requirement already satisfied: multitasking>=0.0.7 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (0.0.12)
Requirement already satisfied: platformdirs>=2.0.0 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (4.4.0)
Requirement already satisfied: pytz>=2022.5 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (2025.2)
Requirement already satisfied: frozendict>=2.3.4 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (2.4.6)
Requirement already satisfied: peewee>=3.16.2 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (3.18.2)
Requirement already satisfied: curl_cffi>=0.7 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (0.13.0)
Requirement already satisfied: protobuf>=3.19.0 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (6.32.1)
Requirement already satisfied: websockets>=13.0 in /user/Library/Python/3.9/lib/python/site-packages (from yfinance->-r ./requirements.txt (line 2)) (15.0.1)
Requirement already satisfied: soupsieve>=1.6.1 in /user/Library/Python/3.9/lib/python/site-packages (from beautifulsoup4>=4.14.3->-r ./requirements.txt (line 6)) (2.8)
Requirement already satisfied: typing-extensions>=4.0.0 in /user/Library/Python/3.9/lib/python/site-packages (from beautifulsoup4>=4.14.3->-r ./requirements.txt (line 6)) (4.15.0)
Requirement already satisfied: cffi>=1.12.0 in /user/Library/Python/3.9/lib/python/site-packages (from curl_cffi>=0.7->yfinance->-r ./requirements.txt (line 2)) (2.0.0)
Requirement already satisfied: pycparser in /user/Library/Python/3.9/lib/python/site-packages (from cffi>=1.12.0->curl_cffi>=0.7->yfinance->-r ./requirements.txt (line 2)) (2.23)
Requirement already satisfied: python-dateutil>=2.8.2 in /user/Library/Python/3.9/lib/python/site-packages (from pandas>=1.3.0->yfinance->-r ./requirements.txt (line 2)) (2.9.0.post0)
Requirement already satisfied: tzdata>=2022.1 in /user/Library/Python/3.9/lib/python/site-packages (from pandas>=1.3.0->yfinance->-r ./requirements.txt (line 2)) (2025.2)
Requirement already satisfied: six>=1.5 in /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.0->yfinance->-r ./requirements.txt (line 2)) (1.15.0)
Using cached beautifulsoup4-4.14.3-py3-none-any.whl (107 kB)
Installing collected packages: beautifulsoup4
Attempting uninstall: beautifulsoup4
Found existing installation: beautifulsoup4 4.14.2
Uninstalling beautifulsoup4-4.14.2:
Successfully uninstalled beautifulsoup4-4.14.2
Successfully installed beautifulsoup4-4.14.3

