【问题标题】:Pip install -e packages don't appear in DockerPip install -e 包不会出现在 Docker 中
【发布时间】:2015-04-27 21:04:37
【问题描述】:

我有一个requirements.txt 文件,其中包含:

Flask-RQ==0.2
-e git+https://token:x-oauth-basic@github.com/user/repo.git#egg=repo

当我尝试使用 Docker Compose 构建 Docker 容器时,它会下载两个包并同时安装它们,但是当我执行 pip freeze 时,没有 -e 包的迹象。当我尝试运行该应用程序时,看起来好像尚未安装此软件包。以下是构建的相关输出:

Collecting Flask-RQ==0.2 (from -r requirements.txt (line 3))
  Downloading Flask-RQ-0.2.tar.gz
Obtaining repo from git+https://token:x-oauth-basic@github.com/user/repo.git#egg=repo (from -r requirements.txt (line 4))
  Cloning https://token:x-oauth-basic@github.com/user/repo.git to ./src/repo

这是我的Dockerfile

FROM python:2.7

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install -r requirements.txt

COPY . /usr/src/app

我觉得这种情况很奇怪,希望能得到任何帮助。

【问题讨论】:

  • 您似乎在最后一行拼错了您的目录路径:COPY . /use/src/app。虽然我不太确定你的意图是什么,因为你的 pip install 发生在容器内。
  • @Gigablah,我的错,这是一个错字。但是,问题仍然存在。
  • pip list 输出什么?
  • pip freeze:可编辑包不存在。
  • pip 没有安装包。尝试使用详细输出手动安装它 (-vvv)。也许它会给你一个关于问题原因的提示

标签: python docker pip docker-compose


【解决方案1】:

我遇到了类似的问题,问题出现的一种可能方式是:

WORKDIR /usr/src/app

pip install 之前设置。 pip 将在 WORKDIR 内创建src/ 目录(安装包的位置)。现在这一切都不应该成为问题,因为您的应用文件在复制时不应覆盖src/ 目录。

但是,您可能将卷安装到/usr/src/app。当您这样做时,您将覆盖 /usr/src/app/src 目录,然后您的包将找不到。

因此,一种解决方法是将 WORKDIR 移到 pip install 之后。所以你的Dockerfile 看起来像:

FROM python:2.7

RUN mkdir -p /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install -r /usr/src/app/requirements.txt

COPY . /usr/src/app
WORKDIR /usr/src/app

这为我解决了问题。希望它对你有用。

【讨论】:

  • 其实这是一个很好的解释。谢谢!不过,在我的本地机器上,我在其他目录中有可编辑的安装,因此将它们同步到容器可能太麻烦了......
【解决方案2】:

@mikexstudios 是正确的,这是因为 pip 将包源存储在 /usr/src/app/src 中,但是您在其上安装了一个本地目录,这意味着 python 找不到包源。

我没有改变WORKDIR的位置,而是通过将pip命令改为:

pip install -r requirements.txt --src /usr/local/src

以太方法应该可行。

【讨论】:

    【解决方案3】:

    如果您在从 dockerized 容器下的需求文件安装 git repo 时收到类似的错误,您可能忘记安装 git。

    这是我收到的错误:

    Downloading/unpacking CMRESHandler from 
    git+git://github.com/zigius/python-elasticsearch-logger.git (from -r 
    /home/ubuntu/requirements.txt (line 5))
    Cloning git://github.com/zigius/python-elasticsearch-logger.git to 
    /tmp/pip_build_root/CMRESHandler
    Cleaning up...
    Cannot find command 'git'
    Storing debug log for failure in /root/.pip/pip.log
    The command '/bin/sh -c useradd ubuntu -b /home && echo 
    "ubuntu     ALL     = NOPASSWD: ALL" >> /etc/sudoers             && 
    chown -R ubuntu:ubuntu /home/ubuntu && pip install -r /home/ubuntu/requirements.txt returned a non-zero code: 1
    

    这是一个安装 git 然后安装所有要求的示例 Dockerfile:

    FROM python:3.5-slim
    
    RUN apt-get update && apt-get install -y --no-install-recommends git \
    
    ADD . /code       
    
    WORKDIR /code
    RUN pip install --upgrade pip setuptools && pip install -r /home/ubuntu/requirements.txt
    

    现在您可以在 Dockerized 环境中的需求文件中使用 git 包

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      相关资源
      最近更新 更多