首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个平台使用Pipfile和Pipfile.lock的最佳实践

跨多个平台使用Pipfile和Pipfile.lock的最佳实践
EN

Stack Overflow用户
提问于 2020-07-08 00:13:40
回答 1查看 1.7K关注 0票数 9

当您要在多个平台(即Windows、Linux和Mac)上开发和运行应用程序代码时,是否有使用pipenv进行确定性构建的最佳实践?

例如,如果您要在基于Windows的环境中安装库作为条件依赖项。,则使用pytest

但是如果我定义..。

代码语言:javascript
复制
[dev-packages]
pytest = "*"

在我的项目的Pipfile和运行pipenv install --dev中,需要在基于Linux的Python环境中生成初始Pipfile.lock,因此在生成的Pipfile.lock文件中既没有安装atomicwrites,也没有以任何方式指定atomicwrites

稍后,在我git commit我的新Linux生成的Pipfile.lock之后,我或其他人最终会将提交的Pipfile.lock文件拉到他们的Pipfile.lock机器上,并运行pipenv install --dev来生成他们自己的本地pipenv环境。

  • 但是,当他们去运行pytest测试运行程序时,它会失败,因为atomicwrites不会安装在他们的pipenv环境中,因此pytest命令会因为缺少依赖关系而失败。
  • 更重要的是,我的Windows测试构建在使用CI服务(如GitHub操作或Azure管道)时也会失败,因为pipenv也无法在那里安装atomicwrites依赖项(因为它不会在回购程序的Pipfile.lock规范中指定)。

这个pytest示例是这个问题的一个非常简单的例子。在这种情况下,只要在我的atomicwrites中添加[dev-packages]作为我的[dev-packages]需求之一就足够容易了,这样就可以不考虑平台而安装它,甚至添加sys_platform = "== 'win32'"来指定它只应该由pipenv在Windows平台上安装。

然而,当我的项目有许多依赖项时,这些平台条件依赖关系变得更加难以处理,所有这些依赖项都有它们自己的平台条件依赖关系。

我在几个不同的地方,就像这里还有这里上讨论过这个问题。

但是,我还没有找到任何简单的方法来处理这个问题(除了在不同的平台上运行pipenv之前不使用Pipfile.lock或删除pipenv install --dev文件)。

是否有任何pipenv用户有处理这个多操作系统Pipfile.lock安装问题的推荐最佳实践?

EN

回答 1

Stack Overflow用户

发布于 2021-12-06 15:58:16

这显然太晚了,无法对您有所帮助,但我发现,在这些多个环境中生成锁文件,同时保持过时的版本,解决了pipenv的大多数问题。

例如,我们的CI/CD使用GitHub映像,因此在中:

代码语言:javascript
复制
pipenv install --dev

然后,在Windows shell中

代码语言:javascript
复制
pipenv install --dev --keep-outdated

然而,在Windows中运行有时会导致依赖于该平台(colorama目前正在编写这个答案时就这样做了)。为了避免这种情况,您可以在WSL中重新生成锁文件:

代码语言:javascript
复制
pipenv lock --dev --keep-outdated

这将保持“过时”包来自Windows环境,但通常会修复平台条件。

请注意,上面的舞蹈最终不是万无一失的--我发现了这个问题,因为这个确切的方法并不适用于atomicwrites。但是,它似乎解决了绝大多数问题,以及那些通常无法通过手动将包添加到依赖项中来解决的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62785666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档