[英]How to remove a pipenv's PipFile, PipFile.lock and associated virtualenv?
[英]Best practice for using pipenv Pipfile and Pipfile.lock across multiple platforms
当您要在多个平台(即 Windows、Linux 和 Mac)上开发和运行应用程序代码时,是否有使用pipenv
进行确定性构建的最佳实践?
例如,如果您在基于 Windows 的 Python 环境中安装pytest
, 则atomicwrites
pytest
定义为条件依赖项。
但是,如果我定义...
[dev-packages]
pytest = "*"
作为我项目的Pipfile
中的要求并运行pipenv install --dev
以在基于 Linux 的 Python 环境中生成我的初始Pipfile.lock
,然后在生成的atomicwrites
文件中既不安装也不以任何方式指定Pipfile.lock
。
稍后,在我git commit
我的新 Linux 生成的Pipfile.lock
,我或其他人最终会将提交的Pipfile.lock
文件拉到他们的 Windows 机器上,并将运行pipenv install --dev
以生成他们自己的本地pipenv
环境。
但是,当他们 go 运行pytest
测试运行程序时,它将失败,因为atomicwrites
不会安装在他们的pipenv
环境中,因此pytest
命令将失败,因为缺少依赖项。
What's more, my Windows test-build will also fail when using a CI service like GitHub Actions or Azure Pipelines because pipenv
will fail to install the atomicwrites
dependency there too (because it will not be specified in the repo's Pipfile.lock
specifications).
这个pytest
例子是这个问题的一个超级简单的例子。 在这种情况下,只需在我的Pipfile
中添加atomicwrites
作为我的[dev-packages]
要求之一,以便无论平台如何都可以安装它,或者甚至添加sys_platform = "== 'win32'"
指定它只能由pipenv
在 Windows 平台上安装。
但是,当我的项目有很多依赖项时,这些平台条件依赖项变得更难处理,所有依赖项都有自己的平台条件依赖项。
但是,我还没有找到任何直接的方法来处理这个问题(在不同平台上运行pipenv install --dev
之前不使用pipenv
或删除Pipfile.lock
文件)。
是否有任何pipenv
用户有推荐的最佳实践来处理这个多操作系统Pipfile.lock
安装问题?
这显然为时已晚,对您没有帮助,但我发现在这些多个环境中生成锁定文件同时保持过时版本解决了 pipenv 的大部分问题。
例如,我们的 CI/CD 使用 GitHub 图像,因此在 Windows 子系统中 Linux Z2591C98B70119FE62E91898B:
pipenv install --dev
然后,在 Windows shell
pipenv install --dev --keep-outdated
但是,在 Windows 中运行有时可以将依赖项固定到该平台(在撰写本答案时,colorama 目前正在执行此操作)。 为避免这种情况,您可以在 WSL 中重新生成锁定文件:
pipenv lock --dev --keep-outdated
这将使“过时”的软件包远离仅限 Windows 的环境,但通常会修复平台条件。
请注意,上面的舞蹈最终并不是万无一失的——我发现了这个问题,因为这个确切的方法不适用于atomicwrites
。 但是,它似乎可以解决绝大多数问题,而那些通常无法通过手动将 package 添加到您的依赖项来解决的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.