跨平台 Pipenv.lock

Posted

技术标签:

【中文标题】跨平台 Pipenv.lock【英文标题】:Cross-platform Pipenv.lock 【发布时间】:2019-12-28 05:54:50 【问题描述】:

我正在创建一个跨平台 Python 应用程序,使用 pipenv (据我所知 poetry 也有同样的问题) 用于管理依赖项和虚拟环境。

在尝试在 Windows 和 Linux 上构建应用时,我注意到 Pipenv.lock 是特定于平台的。

例如,我在Windows上创建一个项目并添加pytest,它在锁定文件中有colorama"markers": "sys_platform == 'win32'"。但是在Linux上修改锁文件的时候,比如添加一个新的lib,这个依赖就会消失。

这是两个系统的完整输出和差异https://gist.github.com/AlexP11223/6457fd4c98272c526c855c63088c00d4

它应该像那样工作吗?如果是,最好的处理方法是什么?除了将所有平台的锁定文件提交到 Git 存储库(例如 Pipenv-win.lockPipenv-linux.lock)并在构建时将其中一个重命名为 Pipenv.lock 之外,还有什么更好的解决方案吗?

【问题讨论】:

【参考方案1】:

https://github.com/pypa/pipenv/issues/3902

一位 Pipenv 开发人员建议添加 --keep-outdated 选项。至少在这个简单的例子中,它似乎有效。

目前它在最新版本(2018.11.26)中不起作用,仅在 Git repo master 分支中起作用。

UPD:看来我对 Poetry 的理解有误,默认情况下它会正确处理此问题https://gist.github.com/AlexP11223/afbe247175efdcc897930d8c6ab04184

【讨论】:

我不明白那个要点试图证明什么,特别是因为我实际上在 3.diff 文件中看到了更改的行。 @Kai 文件内容没有变化,只是diff 语法高亮。它只是表明在另一个平台上安装新依赖项时删除了一些依赖项。 我知道这是差异语法突出显示。您在 linux 运行中添加了 hello-world 包这一事实确实令人困惑。我不知道你为什么在安装hello-world 之前和之后区分你的锁定文件。更好的比较是在 Windows 和 Linux 上运行poetry install没有任何锁定文件,然后在两个平台之间比较生成的锁定文件。 @Kay iirc 它仅在重新生成锁定文件时发生,这就是我添加新依赖项的原因。锁定文件的全部意义在于到处都有相同的依赖关系,删除它没有意义。 我的观点是,如果在没有锁定文件的情况下,poetry install 在 Windows 和 Linux 上生成相同的锁定文件,即使在某些依赖项中给出 PEP-508 标记(例如 ipythonpytest),那么你应该没问题。目前,我知道 pipenv 在 Windows 和 Linux 之间为 ipython 生成不同的锁定文件(对于 macOS/darwin 可能也不同)。

以上是关于跨平台 Pipenv.lock的主要内容,如果未能解决你的问题,请参考以下文章

c#10和.net6入门与跨平台开发怎么样

Flutter跨平台框架(Dart语言)

Go语言的跨平台能力到底有多强?看完你就知道了

在 Eclipse 中使用跨平台库设置跨平台 C++ 项目

WPF到跨平台开发,最强大的跨平台UI框架是啥?

C++跨平台学习:入门了解