Ala*_*amu 20 python pip requirements.txt
我有一个requirements.txt文件,其中包含我的虚拟环境所需的软件包列表.是否可以找出文件中提到的所有包是否存在.如果缺少某些软件包,如何找出丢失的软件包?
Zau*_*bov 46
pythonic的做法是通过distutils.text_file.TextFile API.这些要求以setuptools可以理解的格式编写.例如:
Werkzeug>=0.6.1
Flask
Django>=1.3
Run Code Online (Sandbox Code Playgroud)
示例代码:
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)
Run Code Online (Sandbox Code Playgroud)
Joh*_*ang 17
您可以运行pip freeze以查看已安装的内容并将其与requirements.txt文件进行比较.
如果你想安装缺少的模块,你可以运行pip install -r requirements.txt,这将安装任何缺少的模块,并告诉你最后哪些模块丢失和安装.
您可以使用其中的-r选项来pip freeze验证这一点。它会WARNING为未安装的软件包生成日志。应选择一种适当的详细模式才能WARNING显示消息。例如:
$ pip -vvv freeze -r requirements.txt | grep "not installed"
WARNING: Requirement file [requirements.txt] contains six==1.15.0, but package 'six' is not installed
Run Code Online (Sandbox Code Playgroud)
根据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)
Run Code Online (Sandbox Code Playgroud)
请注意,这distutils.text_file.TextFile将删除注释。
如果您不想知道哪些软件包未安装,这里有一条基于 Zaur Nasibov 的答案的简短说明:
python3 -c "import pkg_resources; pkg_resources.require(open('requirements.txt',mode='r'))" &>/dev/null
Run Code Online (Sandbox Code Playgroud)
命令是否成功完成可以用于进行 pip 安装。
作为 Ruby 的等价物bundle check || bundle install,我们正在做:
python3 -c "import pkg_resources; pkg_resources.require(open('requirements.txt',mode='r'))" &>/dev/null || pip3 install --ignore-installed -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
我意识到这并没有解决确切的问题,但是当谷歌搜索这个问题时,这个页面首先出现。无论如何,您只想知道缺少的依赖项是什么,然后才能满足它们。
我们不能仅仅用于pip3 check此目的,因为它不考虑requirements.txt