代码之家  ›  专栏  ›  技术社区  ›  Calaf

如何升级Dockerfile中的venv中的pip?

  •  1
  • Calaf  · 技术社区  · 6 年前

    $sudo docker构建-t我的项目:标签。

    You are using pip version 10.0.1, however version 18.0 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    

    考虑到最近偶尔出现的微妙错误:

    "/usr/bin/pip" "from pip import main" "ImportError: cannot import .."
    

    我宁愿屈服,甚至升级。

    pip upgrade DockerFile , 之后 pip 重要的是venv中的那个(我是不是弄对了?)。所以我的Dockerfile现在有:

    ...
    RUN python -m venv venv
    RUN pip install --upgrade pip
    ...
    

    虽然这是个很有希望的建议,但也不是

    RUN source venv/bin/activate
    RUN pip install --upgrade pip
    

    RUN source venv/bin/activate
    RUN python -m pip install --upgrade pip
    

    消除“您正在使用pip版本10.0.1,…”消息。

    3 回复  |  直到 6 年前
        1
  •  10
  •   David Maze    6 年前

    解决这个问题最简单的方法就是不要在Docker映像中使用虚拟环境。虚拟环境为您提供了一个独立的文件系统空间,其中包含一组私有的Python包,这些包与系统安装不冲突,但Docker映像也不冲突。你只需要在Docker镜像中使用系统pip就可以了。

    FROM python:3.7
    RUN pip install --upgrade pip
    WORKDIR /usr/src/app
    COPY . .
    RUN pip install .
    CMD ["myscript"]
    

    如果您真的想要一个虚拟环境,您需要从虚拟环境的路径运行包装器脚本

    RUN python -m venv venv
    RUN venv/bin/pip install --upgrade pip
    

    或者在上运行虚拟环境“激活”脚本 每一个 RUN命令;它设置的环境变量不会从一个步骤传递到另一个步骤。(每个运行命令都有自己的作用 docker run; docker commit Dockerfile reference

    RUN python -m venv venv
    RUN . venv/bin/activate \
     && pip install --upgrade pip
    COPY . .
    RUN . venv/bin/activate \
     && pip install .
    CMD ["venv/bin/myscript"]
    

    试图在自己的RUN指令中激活虚拟环境,除了生成一个no-op层之外,什么也做不了。

    # This step does nothing
    RUN . venv/bin/activate
    # And therefore this upgrades the system pip
    RUN pip install --upgrade pip
    
        2
  •  1
  •   not_a_bot_no_really_82353    6 年前

    在使用虚拟环境之前 venv 你需要用

    venv\Scripts\activate.bat
    

    在Unix或MacOS上,运行:

    source venv/bin/activate
    

    RUN python -m venv venv . 我强烈建议用另一个名字。

    然后你可以升级 python -m pip install --upgrade pip

        3
  •  0
  •   Calaf    6 年前

    RUN python -m venv venv
    

    那就跑吧

    RUN venv/bin/pip install --upgrade pip
    

    RUN venv/bin/python -m pip install --upgrade pip
    

    但两者都不是

    RUN pip install --upgrade pip
    

    也不是

    RUN python -m pip install --upgrade pip