requirements.txt
仮想環境に必要なパッケージのリストを含むファイル。ファイルに記載されているすべてのパッケージが存在するかどうかを確認することは可能ですか?一部のパッケージが不足している場合、不足しているパッケージを見つける方法は?
[〜#〜]更新[〜#〜]:
これを行うための最新の改善された方法は、distutils.text_file.TextFile
。詳細については、以下のAcumenusの answer を参照してください。
[〜#〜]元の[〜#〜]:
それを行う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
、パッケージの可用性を確認します。
さらに、このアプローチでは サブテスト を使用して、各要件を個別に確認します。これは、すべての障害を文書化するのに役立ちます。
"""Test availability of required packages."""
import distutils.text_file
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 = distutils.text_file.TextFile(filename=str(_REQUIREMENTS_PATH)).readlines()
for requirement in requirements:
with self.subTest(requirement=requirement):
pkg_resources.require(requirement)
ご了承ください distutils.text_file.TextFile
はコメントを削除します。
Python 3もちろん含まれています distutils.text_file
:
>>> import sys
>>> sys.version
'3.8.0 (default, Oct 28 2019, 16:14:01) \n[GCC 8.3.0]'
>>> sys.modules['distutils.text_file']
<module 'distutils.text_file' from '/usr/lib/python3.8/distutils/text_file.py'>
>>> import distutils.text_file
コマンドラインからこれを行うことに興味がある場合は、pip-missing-reqs
は不足しているパッケージをリストします。例:
$ pip-missing-reqs directory
Missing requirements:
directory/exceptions.py:11 dist=grpcio module=grpc
(pip check
およびpipdeptree --warn fail
チェックなしで、相互の互換性についてインストール済みパッケージのみを監査しますrequirements.txt
。)