根据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。
可以查看pipenv的高级用法
中的注释几乎等同于pipenv install --ignore-pipfile
,但pipenv sync
永远不会尝试重新锁定您的依赖项,因为它被视为原子操作。pipenv sync
默认情况下会尝试重新锁定,除非使用pipenv install
标志。--deploy
所以也许
pipenv install --ignore-pipfile --deploy
等于pipenv sync
这并不是一个真正的答案(我也有兴趣确认),但就其价值而言,我们一直在使用
pipenv install --system --deploy --ignore-pipfile
在我们的 Dockerfile 中取得了良好的结果。
你可以直接去
pipenv install --deploy
它实现了相同的效果,您可以添加
--system
标志,但最好不要添加。
在 docker 镜像中使用 python 虚拟环境并没有真正的坏处,但有一些微妙的好处。 Pipenv 现在建议不要进行系统范围的安装https://github.com/pypa/pipenv/pull/2762
不确定它是否是在您发布此问题后添加的,但是文档确实解决了这个问题(尽管,公平地说,这对我来说有点“呃?”类型的解释......)
FWIW,我相信
sync
也应该有 --system
标志(我正在尝试解决与您相同的问题,即构建容器,并且不想维护 two 单独的文件:requirements.txt
代表容器的系统 Python,Pipfile
代表我的开发虚拟环境)。
在我看来,你的“黑客”目前是唯一可行的选择。