docker环境中的pipenv同步和pipenv install --system --ignore-pipfile

问题描述 投票:0回答:4

根据pipenv官方文档

同步

pipenv 同步 [选项]

安装 Pipfile.lock 中指定的所有软件包。

安装

pipenv 安装 [选项] [软件包]...

安装提供的软件包并将其添加到 Pipfile,或者(如果未提供软件包)安装 Pipfile 中的所有软件包。

--忽略 pipfile 安装时忽略 Pipfile,使用 Pipfile.lock。

可以安全地假设

pipenv sync
pipenv install --ignore-pipfile
相同且没有任何隐藏的缺点吗?

更多背景:我使用 --system 标志将 python 包安装到系统中,因为我不关心 docker 容器中的隔离环境。然而 --system 标志对于

pipenv sync
不可用(参见 github 问题),所以我认为
pipenv install --system --ignore-pipfile
可能是一个可行的 hack。

python docker pip pipenv
4个回答
17
投票

可以查看pipenv的高级用法

中的注释

pipenv install --ignore-pipfile
几乎等同于
pipenv sync
,但
pipenv sync
永远不会尝试重新锁定您的依赖项,因为它被视为原子操作。
pipenv install
默认情况下会尝试重新锁定,除非使用
--deploy
标志。

所以也许

pipenv install --ignore-pipfile --deploy
等于
pipenv sync


7
投票

这并不是一个真正的答案(我也有兴趣确认),但就其价值而言,我们一直在使用

pipenv install --system --deploy --ignore-pipfile

在我们的 Dockerfile 中取得了良好的结果。


1
投票

你可以直接去

pipenv install --deploy

它实现了相同的效果,您可以添加

--system
标志,但最好不要添加。

在 docker 镜像中使用 python 虚拟环境并没有真正的坏处,但有一些微妙的好处。 Pipenv 现在建议不要进行系统范围的安装https://github.com/pypa/pipenv/pull/2762


1
投票

不确定它是否是在您发布此问题后添加的,但是文档确实解决了这个问题(尽管,公平地说,这对我来说有点“呃?”类型的解释......)

FWIW,我相信

sync
也应该有
--system
标志(我正在尝试解决与您相同的问题,即构建容器,并且不想维护 two 单独的文件:
requirements.txt 
代表容器的系统 Python,
Pipfile
代表我的开发虚拟环境)。

在我看来,你的“黑客”目前是唯一可行的选择。

© www.soinside.com 2019 - 2024. All rights reserved.