如果有人在pipenv环境中意外地使用了pip install
而不是pipenv install
,则该包不会反映在Pipfile上的包列表中,也不会反映在Pipfile.lock中
问题是,您可能会使用这个Pipfile.lock进行部署,认为您已经拥有了所需的一切,而实际上您却缺少一个包
我查看了文档https://pipenv.pypa.io/以了解在运行pip install
而不是pipenv install
(甚至是错误地)时实际发生了什么,我找不到对此的解释
如果您运行pipenv graph
,它实际上会显示通过pip安装的软件包!所以我知道pipenv不知怎么知道这些软件包。但是我需要做什么才能使这些反映在PIP文件中呢
首先,让我们澄清一下
pipenv install
命令只是pip
的包装器。如果您使用verbose
安装,您将看到它也只是使用pip install
并将软件包放在同一个激活的虚拟环境中。那么答案是什么呢只是
pipenv
特定的操作将不完成。这包括更新Pipfile和Pipfile.lock(这是首先使用pipenv
的主要原因之一)以具有确定性构建。Pipfile您可以手动更新自己,但是对于Pipfile.lock…您不能是的,因为正如我所说,他们都只是使用
pip
。这两种方法都将在相同的虚拟环境中安装软件包,pipenv graph
只是检查是否相同env。包将存储在lib/pythonX.Y/site-packages
下的文件夹中,无论是使用pipenv
还是普通pip
现在谈谈你的实际问题:
D Malan's comment of using ^{} 是一个很好的方法。从文档中:
如上所述,您只需要运行该命令来检查不一致性。添加
dry-run
命令,使其仅报告,而不是实际卸载它们然后,您可以为此创建一个脚本,如下面的Bash脚本:
在带有
pip install
-ed包(例如mypy)和pipenv install
-ed包(例如flake8)的测试环境上运行它:解决
如果您使用的是Git,那么将脚本作为git pre-commit hook的一部分
当发现不一致时,提交将中止,从而阻止您提交可能不完整的Pipfile.lock
相关问题 更多 >
编程相关推荐