質問: Python のパッケージを配布する際、依存するパッケージを指定するのに `requirements.txt` と、 `setuptools` の `install_requires` オプションを利用する方法の二種類があります。 どちらの方法がより一般的で推奨されているのでしょうか。
回答: パッケージを配布する場合に、 pip freeze が出力する requirements をそのまま利用してはいけません。 理由は以下のとおりです。 * テスト自動化やスタイルチェックなど、開発時に使う、そのパッケージが実際には依存していないパッケージまで含まれてしまう可能性がある。 * マイクロバージョンまで詳細に指定されてしまい、複数のパッケージが同じパッケージのバージョン違いに依存するという dependency hell を引き起こす。 Python の有名なライブラリは、マイクロバージョンでは互換性を壊さない用に注意されているので、自分が作成したパッケージを配布するときには setup.py の install_requirements でのバージョン指定をしないか、緩くすることで、 dependency hell を避ける事ができます。 pip freeze は、 Web アプリケーションをデプロイするときなど、開発環境で検証された構成と同じ構成をステージング・本番環境で作りたい場合などに有効です。