pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

2024-06-29

所以今天我确实发现随着发布pip 10.x.x the req软件包更改了其目录,现在可以在下面找到pip._internal.req.

由于通常的做法是使用parse_requirements功能在你的setup.py从需求文件中安装所有依赖项我现在想知道这种做法是否应该改变,因为它现在位于_internal?

或者不使用的实际最佳实践是什么parse_requirements?


首先,我相信解析requirements.txt在包元数据中填充依赖项列表并不是一个好主意。这requirements.txt文件和“安装依赖项”列表是两个不同的概念,它们不能互换。应该是相反的,包元数据中的依赖项列表应该被视为某种事实来源,并且诸如requirements.txt应该从那里生成。例如,使用诸如pip-compile https://pypi.org/project/pip-tools/。请参阅此答案底部的注释。

但每个人都有不同的需求,从而导致不同的工作流程。话虽如此...有 3 种可能性来处理这个问题,具体取决于您希望将项目的包元数据写入的位置:pyproject.toml, setup.cfg, or setup.py.


小心的话!

如果您坚持要从包元数据中读取依赖项列表requirements.txt文件然后确保这个requirements.txt文件包含在“源代码分发”中(sdist)否则构建(到wheel)并且由于显而易见的原因,后续安装将失败。

这些技术仅适用于简单的requirements.txt文件。看需求解析在文档页面中pkg_resources https://setuptools.readthedocs.io/en/latest/pkg_resources.html#requirements-parsing获取有关处理内容的详细信息。简而言之,每一行都应该是有效的PEP 508要求 https://www.python.org/dev/peps/pep-0508/. 真正特定于的符号pip https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format不支持,会导致失败。


pyproject.toml

[project]
# ...
dynamic = ["dependencies"]

[tool.setuptools.dynamic]
# ...
dependencies = requirements.txt

setup.cfg

从 setuptools 版本 62.6 开始,可以在中编写类似的内容setup.cfg:

[options]
install_requires = file: requirements.txt

setup.py

可以解析一个相对简单的requirements.txt文件来自设置工具 setup.py脚本没有pip. The 设置工具项目中已经包含必要的工具顶层包裹pkg_resources.

它或多或少看起来像这样:

#!/usr/bin/env python

import pathlib

import pkg_resources
import setuptools

with pathlib.Path('requirements.txt').open() as requirements_txt:
    install_requires = [
        str(requirement)
        for requirement
        in pkg_resources.parse_requirements(requirements_txt)
    ]

setuptools.setup(
    install_requires=install_requires,
)

Notes:

  • https://github.com/pypa/setuptools/issues/1951#issuecomment-1431345869 https://github.com/pypa/setuptools/issues/1951#issuecomment-1431345869
  • https://caremad.io/posts/2013/07/setup-vs-requirement/ https://caremad.io/posts/2013/07/setup-vs-requirement/
  • https://setuptools.pypa.io/en/latest/history.html#v62-6-0 https://setuptools.pypa.io/en/latest/history.html#v62-6-0
  • 另请参阅另一个答案:https://stackoverflow.com/a/59971469 https://stackoverflow.com/a/59971469
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pip 升级到 pip 10.x.x 后解析需求文件的正确方法? 的相关文章

  • 使用 selenium 3.8.1 设置 chrome 代理的问题

    我曾经在 chrome 上设置代理 如下面的代码所示 但是当我更新到 selenium 3 8 1 时 代理停止工作 我没有收到任何错误 它只是不使用代理服务器 我不知道为什么 我的 chromedriver 也是最新的 options w
  • 没有要聚合的数字类型 - groupby() 行为发生变化吗?

    我对一些团体代码有问题 我很确定这些代码曾经运行过 在较旧的 pandas 版本上 在 0 9 上 我得到没有要聚合的数字类型错误 有任何想法吗 In 31 data Out 31
  • 如何将 Lisp 程序的输出转换为 Python?

    我有一个非常大的 Lisp 项目 我想以编程方式将其输出传输到 Python 程序 即使用 Python 在某些输入上调用 Lisp 程序并将输出返回到 Python 中 该项目仅在 Clozure Common Lisp ccl64 中编
  • 一个类的多个实例

    我正在尝试用 python 编写各种动物的生活模拟 不可能命名我将要使用的类的每个实例 因为我无法知道会有多少个实例 所以 我的问题是 如何自动为对象命名 我正在考虑创建一个 Herd 类 它可以是该类型的所有动物同时存活 嗯 通常 您只需
  • Python中字典转小写

    我希望这样做 但为了一本字典 My string lower 是否有内置函数或者我应该使用循环 您将需要使用循环或列表 生成器理解 如果你想将所有的键和值都小写 你可以这样做 dict k lower v lower for k v in
  • Python 中的双 SSH 隧道

    今天 我在命令行中使用 ssh 将端口从远程服务器转发 使用中间服务器到我的本地计算机 这是我在 shell 中使用的命令 ssh user remote server L 2443 localhost 433 此 ssh 会话使用 ssh
  • 如何获取 Tkinter 标签文本?

    我正在制作一个用户将从中选择的地址列表 并且将返回地址文本 我需要使用Tkinter Label因为Tkinter Listbox不允许换行 关键是没有 get Label 类中的类似方法 我知道我可以做类似的事情 v StringVar
  • 在 scipy 中按稀疏矩阵分组并返回一个矩阵

    关于使用 SO 处理有几个问题groupby与稀疏矩阵 然而输出似乎是列表 字典 https stackoverflow com questions 35410839 group by on scipy sparse matrix 数据框
  • 有效地将字符串(或元组)转换为 ctypes 数组

    我有一段代码 它采用 PIL 图像并将其转换为 ctypes 数组以传递给 C 函数 w px h px img size pixels struct unpack dI w px h px img convert RGBA tostrin
  • 调整 MLPRegressor 超参数

    我一直在尝试调整 MLP 模型的超参数来解决回归问题 但总是收到收敛警告 这是我的代码 def mlp model X Y estimator MLPRegressor param grid hidden layer sizes 50 50
  • Python字典键(类对象)与多个比较器的比较

    我使用自定义对象作为 python 字典中的键 这些对象有一些默认值hash and eq定义的方法用于默认比较 但在某些功能中我需要使用不同的方式来比较这些对象 那么有什么方法可以覆盖或传递一个新的比较器来仅针对该特定函数进行这些关键比较
  • 在pyspark中将RDD转换为Dataframe

    我正在尝试将 RDD 转换为 pyspark 中的 Dataframe My RDD abc 1 2 0 def 4 6 7 1 我想要 Dataframe 形式的 RDD Index Name Number 0 abc 1 2 1 def
  • 使用正则表达式在 Pandas Series 的各个单元格内分隔逗号分隔的值

    我有一个来自数据库的 csv 文件 我已将其转换为我正在尝试清理的 Pandas DataFrame 问题之一是多个值已输入到需要拆分的单个单元格中 复杂的因素是有一些字符串注释 也带有逗号 需要保持完整 下面的示例以系列形式说明了该问题
  • 使用 scipy 在 python 中读取 MatLab 文件

    我正在使用 python 和 scipy 包来读取 MatLab 文件 然而 它需要太长时间并且崩溃 The Dataset http realitycommons media mit edu RealityMining zip大小约为50
  • 使用 pip freeze 安装 numpy

    I need to install Numpy version 1 17 1 but every time it just freezes I have now tried multiple times and I have been wa
  • Python:UnboundLocalError:赋值前引用的局部变量“count”[重复]

    这个问题在这里已经有答案了 我不明白我的 Python 代码有什么问题 它给了我以下错误 Traceback most recent call last File main py line 77 in
  • pandas 支持 DataFrame 的哪些绘图后端?

    pandas 确实允许与第三方一起绘图绘制后端 https pandas pydata org pandas docs stable development extending html plotting backends 我知道matpl
  • 无法在 BeautifulSoup 中获得正确的链接

    我正在尝试解析一些 HTML 并且想提取与特定模式匹配的链接 我正在使用find使用正则表达式的方法 但它没有给我正确的链接 这是我的片段 有人可以告诉我我做错了什么吗 from BeautifulSoup import Beautiful
  • 使用脚本取消设置 PDF 字体

    我正在使用 xhtml2pdf 库自动创建 PDF 几个月前我有过这个问题 https stackoverflow com questions 25203219 xhtml2pdf doesnt embed helvetica 库嵌入了我没
  • 如何在 Python 中执行等效的 Excel INDEX MATCH

    我有一个问题 关于如何执行相当于使用 Excel 中的 INDEX MATCH 函数返回值并在 Python 中应用它的操作 作为一名对大型数据集执行数据分析和操作的 Excel 用户 为了提高效率 我已转向 Python 我试图做的是根据

随机推荐

  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • tmux:如何调整 tmux 会话的宽度以适合终端面板?

    当我重新附加 tmux 会话时 tmux 窗口的宽度仍然是以前的宽度并用白点填充 所以我的问题是如何调整 tmux 宽度以适合终端面板 理想的设置是 tmux 会话的宽度在重新连接时自动调整 PS 我在mac上使用iterm2 编辑 这实际
  • 如何为 R 中接下来的 2 个单元格复制相同的列值[重复]

    这个问题在这里已经有答案了 我正在尝试使用 R 为列中接下来的 2 个单元格复制相同的列值 我有以下形式的数据框 Time World Cate Data 1994 Africa A 12 1994 B 17 1994 C 22 1994
  • 在 Rasa-NLU 训练数据中使用 spaCy 实体

    我正在尝试使用 Rasa 创建一个简单的程序 它从文本输入中提取 法国 街道地址 遵循 Rasa NLU 文档中的建议 http rasa nlu readthedocs io en latest entities html http ra
  • Windows 故障转储调用堆栈仅显示 wow64

    Problem 我有一个我们开发的供内部使用的 Windows 应用程序 感谢 Windows 错误处理 窗口保持打开状态 我可以轻松地从任务管理器生成故障转储 我以前曾通过 eclipse 在 linux 上使用过一次故障转储 但这是第一
  • 如何覆盖 Template Toolkit 模板文件中的 WRAPPER?

    有没有办法禁用WRAPPER那是设置在新的 配置 http search cpan org dist Template Toolkit lib Template pm 通过模板或临时覆盖parse 我想要一个默认值WRAPPER 我将用于
  • 折叠 numpy 数组除前两个维度之外的所有维度

    我有一个可变维度的 numpy 数组 例如它可以具有以下形状 64 64 64 64 2 5 64 64 40 64 64 10 20 4 我想要做的是 如果维数大于 3 我想将其他所有内容折叠 堆叠到第三维中 同时保留顺序 因此 在我上面
  • 如何打印正在使用的实际 MAVEN_OPTS?

    有没有办法让maven在构建过程中输出环境和maven变量的值 当出现问题时 这对于调试非常有用 您可以使用Maven 帮助插件 http maven apache org plugins maven help plugin and hel
  • Perl 和 MySql 中的 utf8 编码

    我的数据库 MySql 有 utf8 general 排序规则 我正在从数据库访问数据并显示一个网页 用 Perl 开发 它显示瑞典语字符 和不同的字符 我检查了Mysql数据库 在那里我可以看到其中包含 字符的数据 看来 访问数据时存在编
  • SQLite适合并发读吗?

    在没有锁定的情况下 SQLite 数据库的性能是否能达到每秒 50 次读取左右 我正在尝试确定它是否可以在不会经常 写入 的 PHP 网站上使用 它主要是从一小部分表中读取相同的数据 没问题 并发读 写实际上会被 SQLite 序列化 所以
  • 根据值绘制具有条件颜色的折线图

    我想绘制折线图 根据值 它应该改变它的颜色 我发现的是 plot sin seq from 1 to 10 by 0 1 type p col ifelse sin seq from 1 to 10 by 0 1 gt 0 5 red ye
  • numpy.polyval() 的反函数

    我想知道 np polyval 是否有一个方便的反函数 我在其中给出 y 值并求解 x 我知道我可以做到这一点的一种方法是 import numpy as np Set up the question p np array 1 1 10 y
  • 服务帐户的 Keycloak uma-grant 类型票证似乎不适用于策略

    我正在尝试使用 Keycloak AuthzClient 在资源服务器中注册资源和相 关权限 我有一个启用了 authz 服务的资源服务器 resourceserver 使用 AuthzClient 使用包含资源服务器的客户端 ID 和机密
  • PHP 中的随机排列对象

    如何在 PHP 中对对象进行排序 我试过shuffle 但这需要一个数组 Warning shuffle expects parameter 1 to be array object given in var www index php o
  • Finalize() 何时执行? [复制]

    这个问题在这里已经有答案了 在一次采访中我被问到 假设 JVM 在 A 类对象未被使用时运行 gc class A some code here protected void finalize code here 它是否保证finalize
  • 如何为所有导航控制器和视图控制器设置自定义导航栏(标题 + titleView)?

    我有一个选项卡式应用程序 选项卡中有导航控制器 其中有视图控制器 它们都使用相同的导航控制器导航栏 后退按钮 徽标图像 目前 我将此代码放置在每个视图控制器中 void viewDidLoad super viewDidLoad self
  • 如何为广播身份验证路由定义或传递身份验证守卫而不是默认身份验证守卫?

    我对实时事件广播非常陌生 我有简单的 laravel echo server 设置并处理所有内容 我无法针对其他身份验证设置 定义身份验证guard它总是检查user default guard定义于auth php我已经为每个守卫私人通道
  • Visual Studio 2010:嵌入互操作类型

    我在上找到了一些关于此的信息斯科特 汉塞尔曼斯博客 http www hanselman com blog CLRAndDLRAndBCLOhMyWhirlwindTourAroundNET4AndVisualStudio2010Beta1
  • RecyclerView:调整项目大小的动画

    我有一个RecyclerView 回收者视图的每个项目都可以展开或不展开 同一时间只能展开一项 本质上 我试图在棒棒糖拨号器中重新创建历史列表 我发现在 RecyclerView 上使用 LayoutTransition https sta
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖