Python >> python チュートリアル >  >> Python

Python に必要なパッケージがすべて含まれているかどうかを確認する

更新 :

これを行う最新の改善された方法は、 distutils.text_file.TextFile を使用することです .詳細については、以下の Acumenus の回答を参照してください。

オリジナル :

それを行うpythonicの方法は、 pkg_resources 経由です API。要件は、setuptools が理解できる形式で記述されています。例:

Werkzeug>=0.6.1
Flask
Django>=1.3

コード例:

import pkg_resources
from pkg_resources import DistributionNotFound, VersionConflict

# dependencies can be any iterable with strings, 
# e.g. file line-by-line iterator
dependencies = [
  'Werkzeug>=0.6.1',
  'Flask>=0.9',
]

# here, if a dependency is not met, a DistributionNotFound or VersionConflict
# exception is thrown. 
pkg_resources.require(dependencies)

pip freeze を実行できます インストールしたものを確認し、requirements.txt と比較します ファイル。

不足しているモジュールをインストールしたい場合は、 pip install -r requirements.txt を実行できます これにより、不足しているモジュールがインストールされ、最後に不足してインストールされたモジュールが通知されます。


Zaur の回答に基づいて、実際に要件ファイルを使用すると仮定すると、おそらく tests/test_requirements.py で単体テストが必要になる場合があります。 、パッケージの入手可能性を確認します。

さらに、このアプローチではサブテストを使用して、各要件を個別に確認します。これは、すべての障害を文書化するのに役立ちます。サブテストがない場合、1 つの失敗のみが文書化されます。

"""Test availability of required packages."""

import unittest
from pathlib import Path

import pkg_resources

_REQUIREMENTS_PATH = Path(__file__).parent.with_name("requirements.txt")


class TestRequirements(unittest.TestCase):
    """Test availability of required packages."""

    def test_requirements(self):
        """Test that each required package is available."""
        # Ref: https://stackoverflow.com/a/45474387/
        requirements = pkg_resources.parse_requirements(_REQUIREMENTS_PATH.open())
        for requirement in requirements:
            requirement = str(requirement)
            with self.subTest(requirement=requirement):
                pkg_resources.require(requirement)