python管理依赖关系库

一、poetry

Poetry 是一个用于管理 Python 项目依赖关系和构建工具的工具。它提供了一个简单的命令行界面,可以帮助您创建、管理和发布 Python 项目,使用方法:command [options] [arguments]
官网:https://python-poetry.org/docs/

  1. 主要功能和用途
  • 创建新的 Python 项目:Poetry 提供了 new 命令,可以创建一个新的 Python 项目,并设置项目的基本配置。
  • 管理依赖项:Poetry 使用 pyproject.toml 文件来管理项目的依赖项。您可以通过运行 add 命令添加依赖项,指定版本要求,并自动解析依赖关系。Poetry 还支持锁定依赖项的版本,以确保项目在不同环境中的一致性。
  • 构建和发布项目:Poetry 提供了 build 命令,用于构建项目。您可以选择将项目打包为源码分发包或二进制分发包。此外,Poetry 还支持将项目发布到 PyPI 或私有仓库。
  • 虚拟环境管理:Poetry 可以为每个项目创建和管理独立的虚拟环境。这使得项目的依赖项与其他项目隔离开来,确保项目的环境独立性和可重现性。
  • 运行命令和脚本:Poetry 允许您在项目的虚拟环境中运行命令和脚本。这样可以确保命令和脚本在正确的环境中执行,并且可以访问项目的依赖项。
  1. 主要命令
  • new:在指定路径下创建一个新的 Python 项目。
  • init:在当前目录创建一个基本的 pyproject.toml 文件。
  • add:向 pyproject.toml 文件添加新的依赖项。
  • install:安装项目的依赖项,pyproject.toml问价中全部的依赖项。
  • check:验证 pyproject.toml 文件的内容以及与 poetry.lock 文件的一致性。
  • config:管理配置设置。
  • list:列出可用的命令。
  • about:显示有关 Poetry 的信息。
  • build:默认情况下,构建项目为一个源码分发包(tarball)和一个二进制分发包(wheel)。
  • export:将锁定文件以其他格式导出。
  • help:显示命令的帮助信息。
  • lock:锁定项目的依赖项。
  • publish:将包发布到远程仓库。
  • remove:从项目的依赖项中移除一个包。
  • run:在适当的环境中运行命令。
  • search:在远程仓库上搜索包。
  • shell:在虚拟环境内启动一个shell。
  • show:显示有关包的信息。
  • update:根据 pyproject.toml 文件更新依赖项。
  • version:显示项目的版本信息,或根据提供的有效版本规则进行版本升级。
  • cache clear:按名称清除 Poetry 的缓存。您可以指定要清除的特定缓存名称。例如,要清除名为 http 的缓存,可以运行以下命令:
  • cache list:列出 Poetry 的缓存列表。这将显示已存在的缓存名称和路径
  • env info:显示有关当前环境的信息。这将显示有关 Poetry 正在使用的 Python 解释器、虚拟环境路径和其他相关信息的详细信息。
  • env list:列出与当前项目关联的所有虚拟环境。这将显示项目中创建的所有虚拟环境的名称和路径。
  • env remove:删除与项目关联的虚拟环境。您可以指定要删除的特定虚拟环境名称。
  • self add:将额外的包添加到 Poetry 的运行环境中。这可以让您在 Poetry 运行时环境中安装和使用额外的包,而不会影响全局 Python 环境。
  • self install:安装 Poetry 安装的锁定包,包括附加组件。这将安装 Poetry 安装所需的所有包,以及附加组件,以确保 Poetry 的正常运行。
  • self lock:锁定 Poetry 安装的系统要求。这将生成一个锁定文件,其中包含 Poetry 安装所需的所有系统要求的确切版本。这有助于确保在不同环境中使用相同的系统要求。
  • self remove:从 Poetry 的运行环境中删除额外的包。这可以用于卸载不再需要的包,以减少 Poetry 运行时环境的大小。
  • self show:显示 Poetry 运行环境中的包。这将列出 Poetry 运行时环境中安装的所有包,包括其版本号和其他相关信息。
  • self show plugins:显示当前安装的插件的信息。这将列出当前已安装的 Poetry 插件,并显示有关插件的详细信息。
  • self update:将 Poetry 更新到最新版本。这将自动下载并安装最新版本的 Poetry,以确保您使用的是最新的功能和改进。
  • source add:为项目添加源配置。您可以使用此命令将其他源添加到项目中,以便在解析和安装依赖项时使用这些源。源可以是 PyPI、私有仓库或其他支持的源。
  • source remove:移除项目配置的源。使用此命令可以从项目中删除先前添加的源配置。
  • source show:显示项目配置的源信息。这将列出项目中配置的所有源,并显示与每个源相关的详细信息,例如源的名称、URL 和优先级等。
  1. poetry优点
  • 简化依赖项管理:Poetry 提供了一个统一的方式来管理项目的依赖项。您可以在 pyproject.toml 文件中指定项目的依赖项,并且可以使用 Poetry 的命令来安装、更新和删除依赖项。这简化了依赖项的管理过程,使得项目的环境配置更加简单和可靠。
  • 虚拟环境和依赖项隔离:Poetry 支持创建和管理虚拟环境,这使得每个项目都可以拥有独立的 Python 环境。这样可以避免不同项目之间的依赖项冲突,并且可以确保每个项目都使用正确的依赖项版本。
  • 自动生成和维护 pyproject.toml 文件:Poetry 可以自动为您的项目生成和维护 pyproject.toml 文件。这个文件包含了项目的元数据、依赖项和构建配置等信息。通过自动生成和维护这个文件,Poetry 简化了项目配置的过程,使得项目的管理更加方便。
  • 构建和发布支持:Poetry 提供了一些命令来构建和发布项目。您可以使用 Poetry 构建项目的分发包,并且可以轻松地发布到 PyPI 或其他包管理平台。这使得项目的构建和发布过程更加简单和一致。
  1. poetry缺点
  • 学习曲线:Poetry 的功能非常丰富,但这也意味着它有一个相对陡峭的学习曲线。对于新用户来说,可能需要一些时间来熟悉 Poetry 的命令和工作流程。然而,一旦掌握了基本的概念和操作,Poetry 可以提供强大的依赖项管理能力。
  • 社区支持:尽管 Poetry 的用户群体在不断增长,但与其他一些依赖项管理工具相比,Poetry 的社区支持可能相对较小。这意味着在遇到问题时,可能需要花费一些时间来寻找解决方案或寻求帮助。
二、pipdeptree

pipdeptree 是一个用于查看 Python 项目依赖关系的工具。它可以显示项目所依赖的库以及它们之间的依赖关系树。
使用 pipdeptree,可以轻松地了解项目中使用的所有库及其版本,并查看它们之间的依赖关系。这对于管理项目的依赖项、解决依赖冲突以及确保项目的稳定性非常有用。
通过运行 pipdeptree 命令,它会分析当前环境中已安装的库,并以树状结构的形式显示它们之间的依赖关系。每个库都会显示其名称、版本号以及它所依赖的其他库。
git:https://github.com/tox-dev/pipdeptree

  1. 主要功能和用途
  • 查看项目的依赖关系树。
  • 检查依赖项的版本,以确保项目所需的库版本符合要求。
  • 检测潜在的依赖冲突。
  • 导出依赖关系到文件,以便与他人共享或备份。
  1. 主要命令配置
  • -h、–help:显示帮助信息,包括所有可用的配置选项和用法示例。
  • -v,–version:显示程序的版本号
  • -p、–packages:指定要显示依赖关系的包或模块,如:pipdeptree -p requests,beautifulsoup4,可与-f、-j一起使用:pipdeptree -p requests,beautifulsoup4 -f > requirements.txt
  • -w、–warn:显示警告消息,例如循环依赖或不明确的依赖关系,如:pipdeptree -w silence,silence在输出中不显示警告信息;suppress仅显示警告摘要,而不显示详细的警告信息;fail将警告视为错误,并以非零退出代码退出。
  • -f、–freeze:依赖项导文件requirements.txt,如:pipdeptree -f > requirements.txt
  • -j、–json:导出到 JSON 文件,如:pipdeptree -j > dependencies.json
  • -e、–exclude:指定要排除的包或模块,如:pipdeptree -e requests,beautifulsoup4,不会显示 requests,beautifulsoup4 依赖关系树,可与-f、-j一起使用:pipdeptree -e requests,beautifulsoup4 -f > requirements.txt
  • -d、–depth:限制树的深度,默认为无限深度,如:pipdeptree -d 0,可与-f、-j一起使用:pipdeptree -d 0 -f > requirements.txt
  • -r、–reverse:以反向依赖关系的方式显示依赖树,如:pipdeptree -r
  • -l、–local-only:显示当前 Python 环境中已安装的包列表,如:pipdeptree -l
  • -u、–user-only:显示当前 Python 环境中已安装的包的可升级版本,如:pipdeptree -l
  • –encoding:用于指定输出时使用的编码,默认为 UTF-8,如:pipdeptree --encoding
  • –json-tree:输出嵌套的 JSON 格式,模仿文本格式的布局,如:pipdeptree --json-tree > dependencies.json
  • -mermaid:生成 Mermaid.js 格式的流程图,如:pipdeptree --mermaid > dependencies.mmd
  • –graph-output:使用 Graphviz 渲染依赖关系图,值可以是 dot、jpeg、pdf、png、svg 等格式,如:pipdeptree --graph-output png > dependencies.png
  1. pipdeptree优点
  • 展示依赖关系:pipdeptree能够清晰地展示项目的依赖关系,帮助用户理解各个库之间的联系和层级关系。
  • 生成多种格式的文件:除了文本格式的文件,pipdeptree还能生成多种图形格式的文件,如JSON、Graph、PDF、PNG等,这使得依赖关系图更加直观和易于理解。
  • 逆向查找依赖库:pipdeptree可以逆向查找某个依赖库是怎么引入进来的,这有助于用户理解和解决依赖冲突。
  • 发现循环依赖:pipdeptree可以检测项目中的循环依赖,这是一个非常重要的功能,因为循环依赖可能会导致项目运行不稳定。
  1. pipdeptree缺点
  • 无法穿透虚拟环境:如果要在虚拟环境中工作,必须在该虚拟环境中安装pipdeptree。因为跨虚拟环境会出现重复或冲突等情况,因此需要限定虚拟环境。
  • 每个虚拟环境需要单独安装:如果项目使用了多个虚拟环境,那么每个虚拟环境都需要单独安装pipdeptree,这可能会增加额外的复杂性。
三、pigar

pigar 是一个用于生成 Python 项目的依赖项清单的工具。它可以分析项目的源代码,并自动检测项目所使用的外部库和其对应的版本信息,然后生成一个包含这些依赖项的 requirements.txt 文件。
使用 pigar,可以避免手动维护和更新 requirements.txt 文件的繁琐工作。它可以自动检测项目中导入的模块,并根据需要安装适当的版本。这对于确保项目在不同环境中的一致性非常有用,例如在开发、测试和部署过程中。
pigar 还提供了一些额外的功能,例如生成依赖图、检查过期的依赖项以及支持自定义配置等。它是一个方便的工具,可以简化 Python 项目的依赖项管理过程,并帮助确保项目的依赖项保持最新和一致。

  1. 命令参数
  • –version:显示 pigar 的版本信息并
  • -l、–log-level:设置日志级别,可以选择 ERROR、WARNING、INFO、DEBUG。默认为 WARNING。
  • -h、–help:显示此帮助消息并退
  • check:检查 requirements.txt 中列出的包或分发的最新版本。显示是否有可用的更新版本。
  • generate:为给定的 Python 项目生成 requirements.txt 文件。它会分析项目的源代码,并生成一个包含项目所需依赖项及其版本的清单文件。
  • gohome:前往项目的主页,用于报告错误或获取更多信息。这将打开 pigar 的 GitHub 主页,可以在那里提交 Bug 报告或浏览更多相关信息。
  • indexdb:执行与索引数据库相关的操作。这些操作包括构建索引数据库、更新索引数据库等。
  • search:通过顶级导入/模块名称搜索包或分发。可以提供一个或多个导入/模块名称,pigar 将搜索与这些名称相关的包或分发。
  1. pigar generate,分析项目的源代码生成依赖文件
  • -f、–requirement-file:指定要生成的 requirements.txt 文件,如:pigar generate -f requirements.txt
  • –with-referenced-comments:在生成的 requirements.txt 文件中添加注释,列出导入该依赖项的所有文件,如:pigar generate -f requirements.txt --with-referenced-comments
  • -c、–comparison-specifier [|~=|>=|>]:版本比较符号的一部分,例如 abc1.0。默认为 ==。更多信息可以参考 PEP 440。
  • –show-differences / --dont-show-differences:是否在覆盖 requirements.txt 文件时显示差异。
  • –visit-doc-string:在分析导入语句时考虑文档字符串中的 doctest。
  • -e、–exclude-glob TEXT:排除匹配给定通配符的文件和目录进行搜索。默认为 **/.git, **/.hg, **/.svn, **/pycache, venv。
  • –follow-symbolic-links / --dont-follow-symbolic-links:是否跟随所有符号链接到最终目标。默认为跟随符号链接。
  • –dry-run:不实际写入 requirements.txt 文件,只打印文件内容。
  • -i、–index-url TEXT:Python Package Index 的基本 URL,应指向符合 PEP 503(简单仓库 API)的存储库
  • –include-prereleases:是否包括预发布和开发版本。
  • –question-answer [ask|yes|no]:是否以 “yes” 或 “no” 回答所有可能的问题,否则需要手动确认。默认为 “ask”。
  • –auto-select:当找到同一模块的多个包或分发时,是否自动选择最佳匹配的一个或全部。否则需要手动交互选择。
  • –enable-feature [requirement-annotations]:是否启用实验性功能。“requirement-annotations” 功能允许通过添加注释来声明隐式的包/分发或顶级导入名称。
  • -h、–help:显示此帮助消息并退出
  1. pigar check,检查 requirements.txt 中列出的包或分发的最新版本。显示是否有可用的更新版本。
  • -f, --requirement-file FILE:指定要检查的需求文件的路径。可以将此选项与要检查的 requirements.txt 文件的路径一起使用。
  • -i, --index-url TEXT:指定 Python Package Index 的基本 URL。默认情况下,它是指向符合 PEP 503(简单存储库 API)的仓库的 URL。如果希望使用其他索引源,可以使用此选项指定不同的 URL。
  • –include-prereleases:包括预发布和开发版本的依赖项。使用此选项将检查并包括预发布版本和开发版本的依赖项。
  • –format [table|requirements|json]:指定输出的结构格式。可以选择 table、requirements 或 json。默认为 table,以表格形式输出依赖项信息。requirements 格式不能处理复杂的情况,例如 abc>=1.2.0,<1.3.0。如果需要更复杂的输出格式,可以选择 json。
  • -h, --help:显示帮助信息并
  1. pigar search,通过顶级导入/模块名称搜索包或分发。可以提供一个或多个导入/模块名称,pigar 将搜索与这些名称相关的包或分发。
  • -i, --index-url TEXT:指定 Python 包索引的基本 URL。默认情况下,它是指向符合 PEP 503(简单存储库 API)的仓库的 URL。如果希望使用其他索引源,可以使用此选项指定不同的 URL。
  • –include-prereleases:包括预发布和开发版本的包。使用此选项将搜索并包括预发布版本和开发版本的包。
  • –format [table|json]:指定输出的结构格式。可以选择 table 或 json。默认为 table,以表格形式输出搜索结果。如果需要以 JSON 格式获取搜索结果,可以选择 json。
  • -h, --help:显示帮助信息并退出。
  1. piga优点
  • 自动生成依赖项清单:Pigar 可以自动分析项目代码并生成一个包含所有依赖项的 requirements.txt 文件。这减少了手动维护依赖项清单的工作量,并确保清单的准确性。
  • 简单易用:Pigar 的使用非常简单,只需在项目目录中运行命令即可生成依赖项清单。它不需要复杂的配置或额外的参数设置。
  • 快速而轻量:Pigar 的分析过程通常很快,尤其是对于小型项目而言。它是一个轻量级工具,不会引入过多的额外依赖项或复杂的功能。
  • 支持不同的输出格式:Pigar 不仅可以生成 requirements.txt 文件,还支持其他格式,如 pipenv、poetry 和 conda 的依赖项清单格式。这使得 Pigar 更加灵活,适用于不同的项目和依赖项管理工具。
  1. piga缺点
  • 仅基于静态分析:Pigar 是通过静态分析项目代码来确定依赖项的。这意味着它可能无法捕捉到动态导入或运行时依赖项。对于一些复杂的项目,可能需要手动添加一些缺失的依赖项。
  • 依赖项版本控制:Pigar 生成的 requirements.txt 文件默认不包含依赖项的版本信息。这可能导致依赖项的版本冲突或不一致。您可能需要手动编辑生成的清单文件,添加适当的版本约束。
四、pip-tools

pip-tools 是一个用于管理 Python 项目依赖关系的工具。它提供了一组命令行工具,可以帮助创建和维护一个明确的依赖关系文件,以确保项目的依赖关系的一致性和可重现性。

  1. 主要功能和用途
  • 依赖关系管理:pip-tools 允许定义项目的依赖关系,并生成一个明确的依赖关系文件。可以使用简单的文本文件(通常称为 requirements.in)来列出项目的依赖项,包括要求的版本范围。然后,使用 pip-compile 命令将其转换为一个固定的依赖关系文件(通常称为 requirements.txt)。这样可以确保项目的依赖项不会随着时间的推移而意外更改。
  • 版本控制:通过使用 pip-compile 命令生成固定的依赖关系文件,可以明确指定每个依赖项的版本范围。这有助于确保每个依赖项的版本在不同环境中保持一致,从而提高项目的可重现性。可以根据需要更新依赖项的版本,并使用 pip-compile 命令重新生成依赖关系文件。
  • 快速安装:pip-tools 还提供了一个命令行工具 pip-sync,可以根据 requirements.txt 文件一次性安装所有依赖项。这样,可以轻松地在新环境中设置项目的依赖项,而无需逐个安装每个依赖项。
  • 可选的环境隔离:尽管 pip-tools 本身不提供虚拟环境管理功能,但它与其他工具(如 pipenv 或 virtualenv)兼容,并可以与它们一起使用。可以在虚拟环境中安装和管理项目的依赖项,以确保项目与其他环境隔离。
  1. pip-compile,用于生成一个固定的依赖关系文件
  • –version:显示版本信息并退出,如:pip-compile --version
  • -v、–verbose:显示更多的输出,如:pip-compile -v requirements.in
  • -q、–quiet:输出较少的信息,如:pip-compile -q requirements.in
  • -n、–dry-run:只显示将要发生的更改,不做任何实际改变,如:pip-compile -n requirements.in
  • -p、–pre:允许解析预发布版本(默认为禁用)。
  • -r、–rebuild:在开始之前清除任何缓存,从头开始重新构建。
  • –extra TEXT:安装指定的 extras_require 组;可以多次使用。
  • –all-extras:安装所有的 extras_require 组。
  • -f、–find-links TEXT:在指定的目录或 HTML 页面中查找归档文件;可以多次使用。
  • -i、–index-url TEXT:更改索引 URL。
  • –no-index:忽略包索引(仅查看 --find-links 指定的 URL)。
  • –extra-index-url TEXT:添加另一个索引 URL 进行搜索;可以多次使用。
  • –cert TEXT:指定替代的 CA 证书束路径。
  • –client-cert TEXT:指定 SSL 客户端证书路径,一个包含私钥和证书的单个文件(PEM 格式)。
  • –trusted-host TEXT:将此主机标记为受信任,即使它没有有效或任何 HTTPS;可以多次使用。
  • –header / --no-header:在生成的文件中添加头部注释。
  • –emit-trusted-host / --no-emit-trusted-host:在生成的文件中添加受信任主机选项。
  • –annotate / --no-annotate:在结果中添加注释,指示依赖项的来源。
  • –annotation-style [line|split]:选择注释的格式样式。
  • -U、–upgrade / --no-upgrade:尝试将所有依赖项升级到最新版本。
  • -P、–upgrade-package TEXT:指定要升级的特定包;可以多次使用。
  • -o、–output-file FILENAME:输出文件名。如果给出多个输入文件,则此选项是必需的。否则,将从输入文件中派生。
  • –newline [LF|CRLF|native|preserve]:覆盖使用的换行符控制字符。
  • –allow-unsafe / --no-allow-unsafe:允许固定被认为不安全的包:distribute、pip、setuptools。警告:未来版本的 pip-tools 将默认启用此行为。使用 --no-allow-unsafe 保留旧行为。建议现在传递 --allow-unsafe 以适应即将到来的更改。
  • –strip-extras / --no-strip-extras:确保输出文件符合约束条件,避免使用 extras。
  • –generate-hashes:在生成的要求文件中生成 pip 8 风格的哈希值。
  • –reuse-hashes / --no-reuse-hashes:通过重用现有输出文件中的哈希值来提高 --generate-hashes 的速度。
  • –max-rounds INTEGER:解析要求之前的最大循环次数。
  • –build-isolation / --no-build-isolation:在构建现代源分发包时启用隔离。如果禁用构建隔离,则必须已经安装了 PEP 518 指定的构建依赖项。
  • –emit-find-links / --no-emit-find-links:在生成的文件中添加 find-links 选项。
  • –cache-dir DIRECTORY:将缓存数据存储在指定的目录中。
  • –pip-args TEXT:直接传递给 pip 命令的参数。
  • –resolver [legacy|backtracking]:选择依赖项解析器。
  • –emit-index-url / --no-emit-index-url:在生成的文件中添加索引 URL。
  • –emit-options / --no-emit-options:在生成的文件中添加选项。
  • –unsafe-package TEXT:指定要考虑为不安全的包;可以多次使用。替代默认的不安全包:distribute、pip、setuptools。
  • –config FILE:从 TOML 文件中读取配置。默认情况下,按照给定顺序查找以下文件:.pip-tools.toml、pyproject.toml。
  • –no-config:不读取任何配置文件。
  • -c、–constraint FILE:使用给定的约束文件限制版本;可以多次使用。
  • -h、–help:显示帮助信息并退出
  1. pip-sync,用于安装或升级项目的依赖项
  • –version:显示 pip-tools 的版本信息并退出。
  • -a, --ask:显示将要执行的操作,然后询问是否继续。
  • -n, --dry-run:仅显示将要发生的更改,不做任何实际修改。
  • –force:即使存在冲突,也继续进行操作。
  • -f, --find-links TEXT:在指定目录或 HTML 页面中查找存档文件;可以多次使用。
  • -i, --index-url TEXT:更改索引 URL(默认为 PyPI)。
  • –extra-index-url TEXT:添加其他索引 URL 进行搜索;可以多次使用。
  • –trusted-host TEXT:将此主机标记为可信任,即使它没有有效的或任何 HTTPS;可以多次使用。
  • –no-index:忽略软件包索引(仅查看 --find-links 中的 URL)。
  • –python-executable TEXT:如果要针对当前环境以外的环境,则使用自定义的 Python 可执行文件路径。
  • -v, --verbose:显示更多输出。
  • -q, --quiet:提供较少的输出。
  • –user:限制操作范围为用户目录。
  • –cert TEXT:替代 CA 证书束的路径。
  • –client-cert TEXT:SSL 客户端证书的路径,一个包含私钥和 PEM 格式证书的单个文件。
  • –pip-args TEXT:直接传递给 pip install 的参数。
  • –config FILE:从 TOML 文件中读取配置。默认情况下,按照给定的顺序查找以下文件:.pip-tools.toml、pyproject.toml。
  • –no-config:不读取任何配置文件。
  • -h, --help:显示此帮助消息并退出。
  1. pip-tools优点
  • 精确的依赖项控制:pip-tools 允许您为项目的依赖项指定精确的版本约束。通过使用 requirements.in 文件来定义依赖项,然后使用 pip-compile 命令生成具有精确版本约束的 requirements.txt 文件,可以确保项目的依赖项版本一致性和稳定性。
  • 支持多个依赖项文件:pip-tools 支持多个依赖项文件,这使得您可以根据需要组织和管理项目的依赖项。例如,您可以拆分依赖项为基础依赖项和开发依赖项,或者根据不同的环境(如测试环境和生产环境)创建不同的依赖项文件。
  • 快速而灵活:pip-tools 的编译过程通常很快,尤其是对于小型项目而言。它还提供了一些选项来控制生成的 requirements.txt 文件的格式和行为,例如是否包含注释、是否生成 hashes 等。
  • 支持更新和同步依赖项:pip-tools 的 pip-sync 命令可以帮助您将项目的虚拟环境与 requirements.txt 文件中的依赖项保持同步。这样可以确保项目的依赖项与清单文件中指定的版本保持一致,并且可以方便地更新和安装新的依赖项。
  1. pip-tools缺点
  • 学习曲线:对于新用户来说,pip-tools 可能有一定的学习曲线。它的工作流程和命令选项可能需要一些时间来理解和掌握。然而,一旦熟悉了基本概念和操作,pip-tools 可以提供强大的依赖项管理能力。
  • 依赖项冲突解决:pip-tools 生成的 requirements.txt 文件中的精确版本约束可能导致依赖项之间的冲突。如果项目的依赖项之间存在不兼容或冲突的版本要求,您可能需要手动解决这些冲突。
五、pipreqs

pipreqs 是一个用于自动生成 Python 项目依赖项清单(requirements.txt)的工具。当您开发 Python 项目时,项目可能会依赖于其他的 Python 包或库。手动维护依赖项清单可能会很繁琐,而 pipreqs 可以帮助简化这个过程,使用方法:pipreqs [options] [ ]

  1. 主要功能和用途
  • 自动生成依赖项清单:pipreqs 可以自动分析项目的源代码文件,识别 import 语句,并根据这些语句生成一个包含项目所需依赖项的清单文件。
  • 简单易用:只需在项目目录中运行 pipreqs 命令即可生成依赖项清单,无需手动列出每个依赖项。
  • 快速和高效:pipreqs 的分析过程快速且高效,可以在短时间内生成准确的依赖项清单。
  • 支持虚拟环境:pipreqs 可以与 Python 虚拟环境一起使用,以确保生成的依赖项清单与项目的环境相匹配。
  • 支持黑名单和白名单:您可以使用黑名单和白名单机制来排除或包含特定的包或模块,以控制生成的依赖项清单的内容。
  • 支持保存开发环境依赖项:除了项目依赖项,pipreqs 还可以生成包含开发环境依赖项的清单文件,以便在开发过程中使用。
  1. 主要命令配置
  • –use-local:仅使用本地包信息,而不查询 PyPI(Python Package Index)。
  • –pypi-server :使用自定义的 PyPI 服务器。
  • –proxy :使用代理服务器,参数将传递给 requests 库
  • –debug:打印调试信息。
  • –ignore …:忽略额外的目录,多个目录之间用逗号分隔。
  • –no-follow-links:不要跟随项目中的符号链接。
  • –encoding :使用指定的字符编码打开文件。
  • –savepath :将依赖项列表保存到指定的文件中。
  • –print:将依赖项列表输出到标准输出。
  • –force:覆盖现有的 requirements.txt 文件。
  • –diff :将 requirements.txt 中的模块与项目中的导入进行比较。
  • –clean :通过删除在项目中未使用的模块来清理 requirements.txt 文件。
  • –mode :启用动态版本控制,支持 、 或 方案。
  • :例如,Flask~=1.1.2 表示兼容版本,允许 1.1.2 及其后续的修订版本,但不包括 1.2 及更高的主版本。
  • :例如,Flask>=1.1.2 表示大于等于 1.1.2 的版本。
  • :例如,Flask 表示没有指定版本限制。
  1. pipreqs优点
  • 自动生成依赖项清单:pipreqs 可以自动分析项目代码,并根据导入语句生成一个包含所有依赖项的 requirements.txt 文件。这减少了手动维护依赖项清单的工作量,并确保清单的准确性。
  • 简单易用:pipreqs 的使用非常简单,只需在项目目录中运行命令即可生成依赖项清单。它不需要复杂的配置或额外的参数设置。
  • 快速而轻量:pipreqs 的分析过程通常很快,尤其是对于小型项目而言。它是一个轻量级工具,不会引入过多的额外依赖项或复杂的功能。
  • 支持自定义排除和包含:pipreqs 允许您在生成依赖项清单时排除特定的文件或文件夹,以及包含额外的依赖项。这使得您可以更灵活地控制生成的清单内容。
  1. 缺点
  • 仅基于静态分析:pipreqs 是通过静态分析项目代码来确定依赖项的。这意味着它可能无法捕捉到动态导入或运行时依赖项。对于一些复杂的项目,可能需要手动添加一些缺失的依赖项。
  • 依赖项版本控制:pipreqs 生成的 requirements.txt 文件默认不包含依赖项的版本信息。这可能导致依赖项的版本冲突或不一致。您可能需要手动编辑生成的清单文件,添加适当的版本约束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React16源码: React中LegacyContext的源码实现

LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了&#xff0c;就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢&#xff1f;因为它…

知识点积累系列(一)golang语言篇【持续更新】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 知识点积累 系列文章的第一篇&#xff0c;记录golang语言相关的知识点 1.结构体的mapstructure是什么 mapstructure:"default" mapstructure是一个Go语言的库&#xff0c;用于将一个map中的值映射到…

C语言王道第八周一题

Description 初始化顺序表&#xff08;顺序表中元素为整型&#xff09;&#xff0c;里边的元素是 1,2,3&#xff0c;然后通过 scanf 读取一个元素&#xff08;假如插入的是 6&#xff09;&#xff0c;插入到第 2 个位置&#xff0c;打印输出顺序表&#xff0c;每个 元素占 3 个…

添加了gateway之后远程调用失败

前端提示500&#xff0c;后端提示[400 ] during [GET] to [http://userservice/user/1] 原因是这个&#xff0c;因为在请求地址写了两个参数&#xff0c;实际上只传了一个参数 解决方案&#xff1a;加上(required false)并重启所有相关服务

华为HI模式与华为智选模式的左右互博

从去年开始&#xff0c;华为的智驾成果便不断释放出来&#xff0c;一边是号称遥遥领先的问界系列的大卖&#xff0c;对外展示了华为强悍的科技实力&#xff1b;另一边是华为汽车BU的分拆融资&#xff0c;在业界引发了广泛关注&#xff0c;再次让外界看到了华为在“造车”上的立…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson13(买东西)(餐厅点餐事宜;询问有无座位;食物如何调理:牛排、咖啡等;菜单等相关)

《美语从头学初级入门篇》 注意&#xff1a;被 删除线 划掉的不一定不正确&#xff0c;只是不是标准答案。 文章目录 Lesson 13 At the Restaurant 在餐厅会话A会话B笔记餐厅询问有无座位&#xff1b;餐厅电话订座其他餐厅询问有无座位的问法 吸烟区与非吸烟区&#xff08;smo…

《Python 简易速速上手小册》第3章:Python 的函数和模块(基于最新版 Python3.12 编写)

注意&#xff1a;本《Python 简易速速上手小册》 核心目的在于让零基础新手「快速构建 Python 知识体系」 文章目录 <mark >注意&#xff1a;本《Python 简易速速上手小册》<mark >核心目的在于让零基础新手「快速构建 Python 知识体系」 3.1 函数&#xff1a;编写…

订婚支出及共同生活消费是否属于彩礼?应否返还?

恋爱期间&#xff0c;男女双方为增进情感而互赠财物的现象十分普遍。而当双方关系结束时&#xff0c;赠送财物的一方要求对方返还时&#xff0c;法院能否支持其主张&#xff1f; 一起男方向女方及女方母亲索要彩礼及恋爱期间花销钱款引发的婚约财产纠纷案&#xff0c;法院综合双…

[力扣 Hot100]Day18 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 出处 思路 在原数组上直接操作势必会出现“冗余”的0&#xff0c;即原本[i,j]处不是0&#xff0c;例如由于i行的其他位置有0导致[i,j]…

Shell中的AWK

1.awk的工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。awk倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的&#xff0…

【WPF.NET开发】优化性能:数据绑定

本文内容 如何解析数据绑定引用绑定到大型 CLR 对象绑定到 ItemsSource将 IList 绑定到 ItemsControl 而非 IEnumerable请勿仅为数据绑定而将 CLR 对象转换为 XML Windows Presentation Foundation (WPF) 数据绑定功能提供了一种简单一致的方法来呈现应用程序和与数据交互。 …

day38_MySQL

今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些&#xff1f; Java程序存储数据&#xff08;变量、对象、数组、集合&#xff09;&#xff0c;数据保存在内存中&#xff0c;属于瞬时状态存储。文件&…

删除有序数组中的重复项[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个非严格递增排列的数组nums&#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次&#xff0c;返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。 考虑nums的唯一元素…

Source Insight 4的使用经验

问题1 函数结束提示符<<end tagDebugData>> 在source insight里的options→preference→syntax decorations→auto annotations→annotate closing braceswith end-comments关闭或启动显示. 但是有的有有的没有&#xff0c;奇怪! 参照网络答案&#xff1a; Sou…

DataX介绍

一、介绍 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 github地址 详细文档 操作手册 支持数据框架如下&#xff1a; 架构 Reader&#xff1…

IPV4 转 IPV6 解决方案大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

App全测试扫描漏洞工具

APP 有漏洞被测要下架&#xff0c;怎么处理&#xff1f; 如题&#xff0c;今天被问到&#xff1a;市面上有什么好的 APP 漏洞扫描工具推荐&#xff1f;我们的 APP 有漏洞&#xff0c;需要下架 APP&#xff1f; 前言 事情的经过是这样的&#xff1a; 1&#xff1a;学员公司测试…

UnityShader(九)Unity中的基础光照(下)

标准光照模型 光照模型有许多种&#xff0c;但在早期游戏引擎中&#xff0c;往往只使用一个光照模型&#xff0c;被称为标准光照模型。 标准光照模型只关心直接光照&#xff0c;也就是那些直接从光源发射出来照射到物体表面后&#xff0c;经过物体表面的一次反射直接进入摄像…

在Meteor Lake上测试基于Stable Diffusion的AI应用

上个月刚刚推出的英特尔新一代Meteor Lake CPU&#xff0c;预示着AI PC的新时代到来。AI PC可以不依赖服务器直接在PC端处理AI推理工作负载&#xff0c;例如生成图像或转录音频。这些芯片的正式名称为Intel Core Ultra处理器&#xff0c;是首款配备专门用于处理人工智能任务的 …

Backtrader 文档学习- Broker - Slippage

Backtrader 文档学习- Broker - Slippage 1.概述 回测无法保证真实的市场条件。无论市场模拟有多好&#xff0c;在真实市场条件下都可能发生滑点。这意味着&#xff1a; 请求的价格可能无法与真实市场的价格匹配 集成的回测broker支持滑点。以下参数可以传递给broker &#…