Skip to main content

Python向け依存関係管理ツール

著者
Headshot of Hayley Denbraver

Hayley Denbraver

Python feature

2020年4月15日

0 分で読めます

依存関係の管理は、Pythonプロジェクトの健全性を保つうえで重要です。依存関係を適切に管理すると、予測可能性、持続可能性、セキュリティの面でメリットが得られます。依存関係をきちんと管理すれば、ローカル、開発、本番の各環境で一貫した動作を実現できます。依存関係が適切に管理されていれば、長期サポートの期限に追われたり、互いに整合しない依存関係に悩まされたりすることもありません。また、適切な依存関係管理には、直接・間接を問わず使用しているすべてのパッケージを把握し、セキュリティ上の問題を理解して、問題の解決に必要な対応を取ることも含まれます。

依存関係を適切に管理するのは簡単ではありません。Pythonプロジェクトでこの問題に取り組む方法はいくつもあります。ここでは、依存関係の管理をできるだけ簡単にすることを目指し、いくつかの選択肢を紹介します。

Pythonで依存関係を管理するには、どんな選択肢がありますか?

Venv

venvモジュールは、Python 3.3以降の標準ライブラリに含まれています。お使いのマシンにPython 3.3以降がインストールされていれば、venvを利用できます。venvを使うと仮想環境を作成できます。仮想環境には、その環境の作成に使用したバージョンと同じPythonがインストールされます。venvを使った環境の作成、アクティブ化、パッケージのインストールについては、公式のPythonドキュメントをご覧ください。venvは使いやすく軽量で、多くのPythonプロジェクトに適した選択肢です。

Virtualenv

Virtualenvは仮想環境を作成するサードパーティー製ライブラリで、古いバージョンのPythonでも使用できます。Python 3.3で標準ライブラリに含まれて以降、多くの開発者が`venv`に移行しました。Python 2.7は2020年初頭にサポートが終了しており、使用は推奨されません。ただし、Python 2.7を使うプロジェクトがある場合は、virtualenvを使って仮想環境を作成できます。また、venvにはない機能もvirtualenvには備わっているため、Python 3のプロジェクトでもvirtualenvを使うPythonistaがいます。たとえば、pipによるアップグレード、パフォーマンスの向上、充実したAPIなどです。この記事の執筆時点では、virtualenvは活発にメンテナンスされており、直近のリリースは2020年4月です。Python 2.7と結び付けて語られることもありますが、現在も健全に開発が続けられており、Python 3にも対応しています。

Pipenv

Pipenvは、便利な機能を備えた依存関係管理の選択肢です。最も大きな特長は、ロックファイルを使ってビルドの再現性を確保できることです。さらに、パッケージインデックスの指定、セキュリティ脆弱性の検出、環境変数の簡単な管理、Windowsとの高い親和性などの高度な機能もあります。この記事の執筆時点で、Pipenvの最新リリースは2018年後半です。1年半にわたって更新されていないため、使用をためらうPythonistaもいるかもしれません。使いやすいツールだと思いますが、長期にわたって手を加える予定のプロジェクトで使うには、少し慎重になるかもしれません。

Poetry

Poetryは、Pythonの依存関係管理とパッケージングのためのツールです。Pipenvと同様、ロックファイルの仕組みを使って再現性の高いビルドを実現します。Poetryは常に仮想環境の使用を保証するため、グローバル環境へのインストールを壊す心配がありません。コマンドラインから依存関係を宣言することも、pyproject.tomlファイルを編集することもできます。バージョンの制約を簡単に指定できるため、既知のセキュリティ脆弱性があるバージョンを避けるのに便利です。この記事の執筆時点では、Poetryは活発にメンテナンスされており、最新リリースは2020年2月、プレリリースは2020年3月です。

Pip-tools

Pip-toolsは、バージョンを固定した場合も含め、pipベースのパッケージを最新の状態に保つためのオープンソースツールセットです。(バージョンを固定すると、再現性の高いビルドを実現できます。)Pip-toolsは、`pip-compile`と`pip-sync`の2つのコマンドで構成されています。`pip-compile`コマンドは`requirements.txt`ファイルを作成し、`pip-sync`コマンドはそのファイルに沿って予測可能な形でパッケージをインストールします。この記事の執筆時点では、Pip-toolsは活発にメンテナンスされており、最新リリースは2020年2月です。

Hatch

Hatchは、依存関係の管理に加えて、テストなどの機能も備えたオープンソースの生産性向上ツールです。PyPIと連携するツールも含まれているため、オープンソースのメンテナーにも適しています。この記事の執筆時点では、Hatchは活発にメンテナンスされているようです。最新リリースは2019年10月です。他の選択肢には、より新しい更新があるものもありますが、メンテナンスの観点では安心して選べるでしょう。

使用しているプロジェクトにセキュリティ脆弱性があるかどうか、どうすれば確認できますか?

前のセクションで紹介したツールを使えば、依存関係をインストールして最新の状態に保ち、他のプロジェクト用にインストールしたバージョンから分離できます。これらのツールは、さまざまな環境で予測可能かつ安定したビルドを実現するのに役立ちます。

依存関係を検討する際、上記の点は非常に重要ですが、それだけではありません。依存関係にあるセキュリティ脆弱性を把握し、修正することも必要です。Pipenvには、既知のセキュリティ脆弱性に関する機能があります。どの依存関係管理ツールを選んでも、Snykを使えばPythonプロジェクトの依存関係に潜む脆弱性を検出して修正できます。ダッシュボードから修正PRを直接作成することもできます。さらに、Snykはオープンソースプロジェクトとパブリックプロジェクトなら無料で利用できます。無料プランでは、プライベートリポジトリを毎月200回スキャンできます。オープンソースを活用しながら安全性を保つのは、これまで以上に簡単です。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。

続きを読む

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSecのご紹介:AI開発のスピードに追随するセキュリティ

AIを活用した開発は、従来のセキュリティワークフローを上回るスピードで進んでいます。SnykのAgentic AppSecは、セキュリティエージェントが脆弱性を継続的に検出、修正、検証し、人が基準を定められるようにします。

blog feature ai violet
Blog

VulnBump:AIエージェントはビルドを壊さずに脆弱な依存関係を修正できるか?

VulnBumpでは、実際の依存関係のアップグレード307件をAIエージェントで検証します。脆弱性が解消され、ビルドとテストが正常に通った場合にのみ、修正成功と判定します。

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。