跨平台 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.lock
、Pipenv-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 标记(例如 ipython
和pytest
),那么你应该没问题。目前,我知道 pipenv 在 Windows 和 Linux 之间为 ipython 生成不同的锁定文件(对于 macOS/darwin 可能也不同)。以上是关于跨平台 Pipenv.lock的主要内容,如果未能解决你的问题,请参考以下文章