即使在使用显式版本的 Pipfile 和 Pipfile.lock 后,用户之间也存在差异

2024-04-08

抱歉,篇幅较长,这是一个非常复杂的 Pipenv 情况。

在我的公司,我们正在使用 pipelinev (同时使用Pipfile and Pipfile.lock)来控制不同工程师笔记本电脑上使用的包。这对我们来说比大多数团队更重要,因为我们还使用 Zappa 来部署 AWS Lambda 代码,并且它显然直接从部署者的笔记本电脑打包依赖项来部署它们。因此,如果人们的笔记本电脑在依赖性方面不完全一致,我们可以根据部署者的不同在云中获得不同的行为。

我们发现,即使在尝试完全控制依赖关系之后Pipfile and Pipfile.lock,我们最终在不同的笔记本电脑上获得了不同的 Python 包,如下所示pip freeze并如部署代码中的错误所示。

这是显示我的笔记本电脑和我老板的笔记本电脑之间差异的确切过程(我引用的 Pipfile 代码位于多行上,但我将其压缩为一行,因为我在 SO 格式方面遇到了问题):

  1. 一开始,我们所拥有的只是一个Pipfile使用通配符指定的包,例如[requires] python_version = "3.6" [packages] flask = "*"。另外,我们没有Pipfile.lock,我的老板(他是这个项目的第一个编码员)总是跑--skip-lock
  2. 为了更好地控制事情,我首先升级了我们的Pipfile用显式版本替换通配符并使我们的 Python 版本更加具体,例如[requires] python_version = "3.6.4" [packages] Flask = "==1.0.2"。为此,我拿到了老板的一份副本pip freeze输出并将版本复制到Pipfile其中名称与那里列出的内容匹配(我跳​​过了任何不匹配的内容,因为我认为它是上游依赖项,而我们还没有触及它)。我犯了这个。
  3. 我们仍然遇到问题,所以我们决定开始使用Pipfile.lock控制上游依赖关系。所以我的老板通过运行创建了一个pip install没有--skip-lock第一次,并承诺了这一点。
  4. 我拉了Pipfile.lock,删除了我的环境pipenv --rm并重新创建它pipenv install
  5. 我们俩都跑了pip freeze并比较了输出,但我们仍然存在许多差异。

我想我可以让我的老板删除他的pipenv环境并根据承诺重新安装Pipfile and Pipfile.lock,但由于它们是基于他的pip freeze如果这改变了什么,我会有点惊讶。

所以我只是想知道:这种行为真的出乎意料吗?我一直以为的组合pipenv, Pipfile, and Pipfile.lock将保证两个人拥有相同的软件包,只要每个版本都被锁定==[version]。为了获得非常精确的匹配,我们还需要做些什么吗?

如果真是出乎意料的话,我唯一能想到的就是他可能没有跑pipenv shell在他之前pip freeze,但我认为他这样做是因为事情与Pipfiles.

旁注:我还没有转换我们的[dev-packages] in Pipfile有版本,因为我不确定它的作用,并且我认为它无关紧要。所以那些仍然像pylint = "*"

附加信息

以下是回应评论的一些附加信息...但首先我注意到一些有趣的事情:

  • 第一个屏幕截图中没有任何差异(对于pip freeze差异)在Pipfile.
  • 看起来像我的pip freeze输出匹配Pipfile.lock内容,但我老板的没有。我认为这可以解释这些差异,但令人惊讶的是他的pip freeze输出不匹配Pipfile.lock由他自己创造的pipenv lock,除非问题是他跑了pipenv lock从外部pipenv shell.

为了回应这些评论...这是我和我老板的笔记本电脑上 pip freeze 输出(均来自 pipelinev shell 内)之间差异的第一部分:

以下是一些差异Pipfile.lock在我和老板的笔记本电脑之间。这Pipfile.lock是通过让他跑步获得的pipenv lock(在外面pipenv shell尽管我认为这并不重要),然后现在就提交。然后我把它拉出来,删除了我的环境pipenv --rm, ran pipenv install,并得到以下差异Pipfile.lock他刚刚承诺的。他的版本又在左边。

这些都是所有的差异 - 我不明白的一件事是为什么我们这里的差异比pip freeze. Our Pipfile我们两个人之间还是一样。


确保共享完全相同的环境的唯一方法是与相同的环境同步Pipfile.lock, with pipenv sync(可选pipenv sync --dev).

Pipfile是人类的帮助者,是人类的中间人Pipfile.lock创建时,它不能确保依赖项完全相同。

pipenv install幕后调用 2pipenv功能:lock and sync. pipenv lock将生成一个Pipfile.lock从你的Pipfile。即使有固定版本Pipfile, 可能有不同的Pipfile.lock如果它们是在不同时刻生成的,因为固定包的依赖项可能不会固定(取决于发布者)。pipenv sync然后安装在中找到的确切软件包Pipfile.lock.

直接从依赖项安装您的环境Pipfile.lock,你必须使用pipenv --python 3.6 install --ignore-pipfile, 否则Pipfile.lock将从中重新生成Pipfile.

要轻松解决您的问题,请修复Pipfile.lock版本(如果您使用版本控制,您可以提交它,但您当然这样做了;),然后两者都使用pipenv sync.

然后保留Pipfile.lock只要您致力于次要版本、错误修复……并且可以随意重新生成它以获得主要版本的最新依赖项,就完全相同。在我的项目中,几乎所有依赖项都在Pipfile没有固定,当我们开始新的主要版本时,我们会更新Pipfile.lock尝试新的依赖版本,测试所有内容,有时如果最新引入的向后不兼容的更改,则将依赖项固定到以前的版本,然后我们修复Pipfile.lock直到下一个主要版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使在使用显式版本的 Pipfile 和 Pipfile.lock 后,用户之间也存在差异 的相关文章

  • 由于“环境错误:[错误 13]:权限被拒绝:'usr/local/bin/f2py'”而无法安装软件包

    我正在尝试在 macOS X 上安装 numpy 但执行命令后pip install numpy我收到错误 环境错误 错误13 权限被拒绝 usr local bin f2py 我如何解决它 这对我有用 pip3 install user
  • Python BS4 Scraper 仅返回每个页面的前 9 个结果

    我让这段代码按预期工作 只是它并没有完全按预期工作 一切似乎都很顺利 直到我检查了我的 csv 输出文件并注意到我每页只得到前 9 个结果 每页应该有 40 个结果 因此我得到的结果少于预期的 25 有什么想法吗 import reques
  • Python3 http.server:将日志保存到文件中

    我使用Python3 6编写了一个简单的HTTP服务器来重定向所有请求 我写的文件可以找到here https github com kmahyyg learn py3 blob master antiscanhttp py 我可以在 Ub
  • Spark问题中读取大文件 - python

    我已经使用 python 在本地安装了 Spark 并在运行以下代码时 data sc textFile C Users xxxx Desktop train csv data first 我收到以下错误 Py4JJavaError Tra
  • 通过 SSH 的 Pygame 不注册击键(Raspberry Pi 3)

    所以我得到了 raspi 3 和简单的 8x8 LED 矩阵 在玩了一些之后 我决定用 pygame 的事件制作一个简单的蛇游戏 显示在该矩阵上 我之前没有 pygame 的经验 除了 LED 矩阵之外 没有连接任何屏幕 显示器 所以最初的
  • Python:按条件绘制多个正/负条形图

    这是我第一次用 python 绘制条形图 我的 df 操作 key descript score 0 noodles taste 5 1 noodles color 2 2 noodles health 3 3 apple color 7
  • Twython - 如何使用媒体 url 更新状态

    在我的应用程序中 我允许用户在 Twitter 上发帖 现在我想让他们通过媒体更新他们的状态 In twython py我看到一个方法update status with media从文件系统读取图像并上传到 Twitter 我的图像不在文
  • AES 会话密钥的 RSA 解密失败,并显示“AttributeError:‘bytes’对象没有属性‘n’”

    我正在努力在 Python 3 6 上从 PyCryptodome 实现公钥加密 当我尝试创建对称加密密钥并加密 解密变量时 一切正常 但是当我引入 RSA 和 PKCS1 OAEP 的那一刻 一切就都顺理成章了 session key加密
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 如何使用 tweepy 仅提取主题标签中的文本?

    我想为我的情感分析项目提取主题标签 但是我得到了一个字典列表 其中包含所有主题标签及其在推文中的索引 我只想要文字 我的代码 data tweepy Cursor api search q since a i until b i items
  • 如何从分组数据创建直方图

    我正在尝试根据 pandas 中的分组数据创建直方图 到目前为止 我已经能够创建标准线图 但我不知道如何做同样的事情来获取直方图 条形图 我想获得泰坦尼克号事故中幸存者和未幸存者的 2 个年龄直方图 看看年龄分布是否存在差异 来源数据 ht
  • Tornado:DummyFuture 不支持结果阻塞

    我试图获得一个非常简单的初始服务器 它可以 异步 获取 url 来工作 但它会抛出 Exception DummyFuture does not support blocking for results 有这个SO https stacko
  • Python range() 和 zip() 对象类型

    我了解功能如何range and zip 可以在 for 循环中使用 然而我期望range 输出一个列表 很像seq在 Unix shell 中 如果我运行以下代码 a range 10 print a 输出是range 10 表明它不是一
  • 加载 IPython 笔记本时出错

    一旦我用 Jupyter 打开笔记本文件 它要求我转换文件 我就再也无法在标准 IPython 笔记本中打开它了 我收到以下错误 Error loading notebook Bad Request 2014 12 21 04 13 03
  • Unpivot Pandas 数据

    我目前有一个DataFrame布置为 Jan Feb Mar Apr 2001 1 12 12 19 2002 9 2003 我想将数据 逆透视 使其看起来像 Date Value Jan 2001 1 Feb 2001 1 Mar 200
  • 使用 MinGW 链接到 Python

    我不想创建一个嵌入Python解释器的跨平台程序 并用MinGW编译它 但是 Python 二进制发行版没有提供 MinGW 链接的库 仅python32 lib对于 Visual C 并且 Python 源包不提供使用 MinGW 编译的
  • 如何获取DataFrame.pct_change来计算每日价格数据的每月变化?

    我知道可以用periods争论 但是如何将分布在一个月内 例如交易日 的每日价格数据进行回报化呢 示例数据是 In 1 df AAPL 2009 01 02 16 00 00 90 36 2009 01 05 16 00 00 94 18
  • 从多个大型 NetCDF 文件中提取数据的快速/高效方法

    我只需要从全局网格中提取特定节点集的数据 由纬度 经度坐标 按 5000 10000 的顺序 给出 这些数据是水力参数的时间序列 例如波高 全局数据集很大 因此分为许多 NetCDF 文件 每个 NetCDF 文件大小约为 5GB 包含整个
  • 使 flake8 区分未定义函数和星型导入

    我有一个相当大的项目 我试图在发布之前清理它 但是当我运行 flake8 时 我得到了大量的 F405
  • Python中矩阵元素的双重求和

    基于下面的简化示例 我想在我的代码中 from sympy import import numpy as np init printing x y symbols x y mat Matrix x 1 1 y X 1 2 3 Y 10 20

随机推荐

  • 如何进行 git rebase 并保留提交时间戳?

    我想进行变基以从我的历史记录中删除某个提交 我知道该怎么做 但是 如果我这样做 提交时间戳将设置为我完成变基的那一刻 我希望提交保留时间戳 我在这里看到了最后一个答案 https stackoverflow com a 19522951 3
  • 在 vega-lite 中实现自定义点击处理程序的正确方法是什么

    我似乎无法通过阅读文档来弄清楚这一点 有没有办法实现onClick我的任何标记的事件处理程序 由于 Vega Lite 尚不支持信号 您可以修补生成的 Vega 您可以将信号添加到已编译的 Vega 规范中 然后通过 Vega 视图 API
  • Logback:如何将日志目录从“tomcat/bin”更改为与应用程序相关的?

    我想用slf4j with logback用于记录 您可以在下面看到我的 logback xml
  • Android SmsRetrieverClient 的短信验证不解析消息

    尝试按照此处的步骤实现短信自动读取以进行验证 https developers google com identity sms retriever request https developers google com identity s
  • 如何在 Spring Data REST 项目中使用 DTO?

    Spring Data REST 自动仅公开域对象 但大多数情况下我们必须处理数据传输对象 那么如何以SDR方式做到这一点呢 一种如何合作的方法DTO https en wikipedia org wiki Data transfer ob
  • 如何在 Visual Studio Code 中获取 Unity 函数名称的智能感知?

    我正在关注有关 Unity 的教程 我发现讲师在编写方法名称时具有智能感知功能 然而 我只有类和变量的智能感知 我的意思是像 Rigidbody 这样的 Unity 类和我自己的变量 我还读过 自动补全在 Visual Studio 中不起
  • Android apk 构建的条件资源包含/排除

    我不断回到这个问题 因为似乎没有一个干净的解决方案 有没有人有一个好的策略来从 Android 子项目中排除资源 我有两种情况 1 基础库项目具有 en es 等本地化文件 子项目1使用所有本地化 一切都很好 子项目 2 仅本地化为英语 但
  • Bookdown:如何更改章节标题的大小?

    我正在使用 bookdown 为研讨会生成幻灯片 我使用菜单中的 大 字母选项来显示幻灯片 但是章节标题字体太大 我在哪里 如何修改那个 Thanks Paul 你可以用 css 来控制它yihui https stackoverflow
  • Keycloak Java 管理客户端在触发验证电子邮件时返回 400 错误

    我在 Spring Boot 2 2 上使用 keycloak 服务器版本 8 0 1 和 keycloak java admin 客户端版本 8 0 1 使用 webflux 和 netty 而不是 tomcat 如果此类信息有帮助的话
  • Python - “ascii”编解码器无法解码字节

    我正在使用 Python 2 6 和 Jinja2 创建 HTML 报告 我为模板提供了许多结果 模板循环遍历它们并创建 HTML 表 当调用 template render 时 我突然开始收到此错误 td result result st
  • sorl-缩略图不起作用

    我已经尝试了几个小时来让 sorl thumbnail 工作 但它就是行不通 困难的部分是它没有显示错误 所以我不知道出了什么问题 我按照说明安装了它 我的完整代码可以在这里找到 https github com samos123 Samo
  • 在同一个表上触发 INSERT 和 UPDATE

    众所周知 实体框架无法保存地理数据 所以我的想法是 在我的模型中将经度和纬度指定为十进制 执行用于创建表的 SQL 脚本后 我将启动另一个脚本来添加地理列 然后我想通过触发器在每次插入或更新 经度和纬度 时更新此列 下面的触发器是好的还是坏
  • 在新机器上部署.net应用程序并得到“系统无法执行指定的程序”

    我有一个启动 Excel 的 net 控制台应用程序 我让它在我的开发环境中运行 但我无法让它在我的生产环境中运行 当我尝试运行它时 收到以下错误 系统无法执行指定的程序 我已经在我的生产服务器上安装了 net 2 0 sp2 有任何想法吗
  • PyQT 列表视图不响应数据更改信号

    我一直在关注一些教程并尝试设置列表模型 我的主窗口有两个访问同一模型的列表视图 当我更新一个列表中的一项时 另一个列表不会自行更新 直到它获得焦点 我单击它 所以看起来 dataChanged 信号没有被发出 但我无法弄清楚我的代码与我所基
  • 旋转时使用拖动手柄调整 div 大小

    我可以找到类似的问题 涉及 jQuery UI lib 或者只有 css 没有可拖动的句柄 但没有任何纯数学问题 我尝试执行的是拥有一个可调整大小和可旋转的 div 到目前为止很容易 我可以做到 但旋转时会变得更加复杂 调整大小以相反的方式
  • JavaScript 函数是否可以将其自己的函数调用作为字符串返回?

    在 JavaScript 中 函数是否可以将其自己的函数调用作为字符串返回 function getOwnFunctionCall return the function call as a string based on the para
  • 胡萝卜2 - 我可以从文件夹中聚集文档吗?

    我正在尝试对我在研究项目中收集的文档进行聚类 我正在尝试使用 Carrot2 工作台 但无法找到如何将胡萝卜指向包含文档的文件夹 请问我该怎么做 我有少量文档 txt 需要比较 它们位于独立的研究机器上 因此我无法连接到网络并在那里处理它们
  • Symfony 存储 foreach 循环的结果

    我想知道是否可以存储 foreach 循环的结果 我不知道如何更详细地解释我的问题 所以可以说以下让我得到 3 个不同的数组 events this gt getDoctrine gt getRepository TestBundle Ev
  • IS 回收时正在运行的任务会发生什么情况

    为了帮助提高客户端的性能 我将请求的处理转移到任务上 这样做是因为处理通常需要一些时间 而且我不希望客户端等待一段时间才得到 200 响应 将工作转移到任务上的 Web 服务始终在处理帖子 public void ProcessReques
  • 即使在使用显式版本的 Pipfile 和 Pipfile.lock 后,用户之间也存在差异

    抱歉 篇幅较长 这是一个非常复杂的 Pipenv 情况 在我的公司 我们正在使用 pipelinev 同时使用Pipfile and Pipfile lock 来控制不同工程师笔记本电脑上使用的包 这对我们来说比大多数团队更重要 因为我们还