紹介:
Python 開発者にとって、プロジェクトの依存関係の管理は日常的なタスクであり、気づかれない限り気づかれないことがよくあります。 pip フリーズのシンプルさ > requirements.txt は魅力的ですが、より複雑なプロジェクトでは、ワークフローを中断する予期せぬ問題が発生する可能性があります。いくつかの障害に遭遇した後、依存関係を管理するためのより信頼性が高く洗練されたアプローチを発見したので、それを共有したいと思います。
pip フリーズの問題:
コマンド pip フリーズ > requirements.txt は、多くの開発者にとって標準的な手法となっています。ほとんどの場合に機能しますが、いくつかの重大な欠点があります。
不要なパッケージの包含: pip フリーズは、他のパッケージの依存関係として自動インストールされたパッケージを含む、インストールされているすべてのパッケージをキャプチャします。その結果、プロジェクトが直接依存していないパッケージが含まれる可能性のある、requirements.txt が肥大化します。
バージョンの競合: 自動インストールされる依存関係を含めると、特にこれらの依存関係がプロジェクトには必要ないが、他のパッケージで必要な場合に、バージョンの競合が発生することがあります。
環境固有の問題: pip フリーズは環境の現在の状態を反映しており、特定のローカル ニーズのためにインストールされたパッケージが含まれている可能性があり、別のマシンで環境を複製する際に問題が発生します。
障害に遭遇:
プロジェクトの環境を複製しようとしたときに、私はこれらの問題に直接直面しました。 pip フリーズを使用してrequirements.txtを生成しましたが、これらの依存関係を新しい仮想環境にインストールしようとすると、次のエラーが発生しました:
ERROR: Could not find a version that satisfies the requirement cloud-init==23.1.2 (from -r requirements.txt (line 13)) (from versions: none) ERROR: No matching distribution found for cloud-init==23.1.2 (from -r requirements.txt (line 13))
cloud-init は私が直接インストールしたことのないパッケージなので、このエラーはイライラさせられました。これは依存関係として取り込まれましたが、pip フリーズはそれを私のプロジェクトの第一級市民であるかのようにキャプチャしました。
解決策を見つける:
これらの問題に対処するために、pipreqs と pip-tools を使用したより洗練されたアプローチに移行しました。ここでは、依存関係管理の問題を解決するための段階的なプロセスを示します:
まず、依存関係管理に対するより詳細なアプローチを提供する pipreqs と pip-tools をインストールしました。
pip install pipreqs pip-tools
pip フリーズを使用する代わりに、pipreqs を使用して、プロジェクトで直接使用されるパッケージのみを含むrequirements.in ファイルを生成しました。これにより、不要な依存関係が含まれるのを防ぎます:
pipreqs ./ --savepath requirements.in --force --ignore ./venv/,./test_venv/ --mode no-pin
各フラグの機能は次のとおりです:
次に、pip-tools の pip-compile を使用して、最終的なrequirements.txtを生成しました。
pip-compile
このステップにより、必要なバージョンのパッケージのみが確実に含まれ、クリーンで競合のないrequirements.txtが提供されます。
最後に、新しく生成されたrequirements.txtから依存関係をインストールしました:
pip install -r requirements.txt
このアプローチにより、不要なパッケージやバージョンの競合が発生せず、より無駄がなく管理しやすい required.txt ファイルが作成されました。
結論:
pipreqs と pip-tools を使用した、pip フリーズからより堅牢な依存関係管理プロセスへの切り替えは、私のワークフローにとって大きな変化でした。これにより、差し迫った問題が解決されただけでなく、プロジェクトの依存関係をより適切に制御できるようになりました。
ピップフリーズに依存していて、同様の課題に直面している場合は、このアプローチを試すことを強くお勧めします。これは小さな変化ですが、Python プロジェクトの安定性と移植性に大きな違いをもたらす可能性があります。
以上がPython で Requirements.txt を抽出する最も簡単な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。