【问题标题】:pipenv sync and pipenv install --system --ignore-pipfile in docker environmentpipenv 同步和 pipenv install --system --ignore-pipfile 在 docker 环境中
【发布时间】:2019-03-26 03:15:17
【问题描述】:

根据pipenv official documentation

同步

pipenv 同步 [选项]

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

安装

pipenv 安装 [OPTIONS] [PACKAGES]...

安装提供的包并将它们添加到 Pipfile 中,或者(如果没有提供包)安装 Pipfile 中的所有包。

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

是否可以假设 pipenv syncpipenv install --ignore-pipfile 相同而没有任何隐藏的缺点?

更多背景:我使用 --system 标志将 python 包安装到系统,因为我不关心 docker 容器中的隔离环境。然而 --system 标志对于pipenv sync 不可用(参见github issue),所以我认为pipenv install --system --ignore-pipfile 可能是一个可行的hack。

【问题讨论】:

  • 完全同意sync 应该有--system。这将消除在不需要 virtualenv 的容器中使用锁定文件的许多困惑。
  • 对于感兴趣的读者:pipenv sync --system 现在从 pipenv 2020.11.4 开始工作(PR github.com/pypa/pipenv/pull/4441

标签: python docker pip pipenv


【解决方案1】:

你可以在Advanced usage of pipenv看到注释

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

所以也许pipenv install --ignore-pipfile --deploy 等于pipenv sync

【讨论】:

    【解决方案2】:

    不是一个真正的答案(我也有兴趣确认),但对于它的价值,我们一直在使用

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

    在我们的 Dockerfile 中取得了不错的效果。

    【讨论】:

      【解决方案3】:

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

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

      在我看来,您的“hack”目前是唯一可行的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 2019-03-27
        • 2019-01-04
        相关资源
        最近更新 更多