31

我有一个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

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

4

3 回答 3

34

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

WORKDIR /usr/src/app

之前被设置pip install。pip 将src/在 WORKDIR 中创建目录(安装包的位置)。现在所有这些都不应该成为问题,因为您的应用程序文件在复制时不应覆盖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

这为我修好了。希望它对你有用。

于 2015-05-09T03:18:03.173 回答
25

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

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

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

以太方法应该有效。

于 2016-01-29T22:53:48.817 回答
2

如果您在从 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 包

于 2018-01-02T08:55:57.820 回答