gpt4 book ai didi

python - Dockerfile RUN合并pip命令

转载 作者:行者123 更新时间:2023-12-02 21:12:52 26 4
gpt4 key购买 nike

我有一个看起来像这样的旧dockerfile

FROM ubuntu:16.04
ENV VISUAL=vim
ENV EDITOR=$VISUAL
ENV TERM=xterm
ENV TERMINFO=/etc/terminfo
ENV PYTHONIOENCODING=utf-8
RUN apt-get --yes update && apt-get --yes upgrade && apt-get --yes install python \
python-dev \
python-pip
<...lots of other apt-get install...>
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
<...other staffs>

效果很好,但是我想通过减少图层来减小图像尺寸。所以我合并了最后两行
RUN pip install --upgrade pip && \
pip install -r requirements.txt

但是构建失败...
Step 15/45 : RUN pip install --upgrade pip &&  pip install -r requirements.txt
---> Running in b96971e60263
Collecting pip
Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
Found existing installation: pip 8.1.1
Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-18.1
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main

合并这两行时我想念什么?

最佳答案

假设:在pip install --upgrade pip中,pip命令运行为/usr/bin/pip,并且在升级pip时,会在pip上创建一个新的/usr/local/bin/pip可执行文件。这个新的可执行文件就是pip install -r requirements.txt应该运行的东西,但是当您将它们放在一个RUN命令中并因此在一个单独的shell实例中运行它们时,shell将缓存命令位置,因此pip中的第二个pip ... && pip ...最终被运行从与第一个相同的位置开始,由于旧版本和新版本之间的pip内部变化而失败。您可以通过在单个pip命令的中间插入hash -d pip来强制 shell 程序取消RUN的位置的缓存:

RUN pip install --upgrade pip && \
hash -d pip && \
pip install -r requirements.txt

关于python - Dockerfile RUN合并pip命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53461493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com