我有一个requirements.txt文件,其中列出了我的虚拟环境所需的软件包。是否有可能找出文件中提到的所有软件包是否都存在。如果缺少某些软件包,如何找出丢失的软件包?
requirements.txt
更新 :
进行更新和改进的方法是通过distutils.text_file.TextFile。有关详细信息,请参见Acumenus答案。
distutils.text_file.TextFile
根据Zaur的回答,假设您确实使用了需求文件,则可能需要进行单元测试(可能在中)tests/test_requirements.py,以确认软件包的可用性。
tests/test_requirements.py
此外,此方法使用子测试独立确认每个要求。这很有用,以便记录所有故障。如果没有子测试,则仅记录单个失败。
"""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)
原文 :
这样做的pythonic方法是通过pkg_resources API。要求以setuptools可以理解的格式编写。例如:
pkg_resources
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)