我有一个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
我发现这种情况非常奇怪,并希望得到任何帮助。
答案 0 :(得分:23)
我遇到了类似的问题,问题出现的一种可能方式是:
WORKDIR /usr/src/app
在pip install
之前设置。 pip将在WORKDIR内创建src/
目录(安装包的位置)。现在所有这一切都不成问题,因为您的应用程序文件在复制时不应覆盖src/
目录。
但是,您可能将卷安装到/usr/src/app
。当您这样做时,您将覆盖/usr/src/app/src
目录,然后找不到您的包。
因此,一个修复是在pip install
之后移动WORKDIR。因此,您的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
这为我修好了。希望它能为你效劳。
答案 1 :(得分:20)
@mikexstudios是正确的,发生这种情况是因为pip将包源存储在/usr/src/app/src
中,但你在它上面安装了一个本地目录,这意味着python无法找到包源。
我没有改变WORKDIR
的位置,而是通过将pip命令改为:
pip install -r requirements.txt --src /usr/local/src
以太方法应该有效。
答案 2 :(得分:2)
如果从Docker化容器下的需求文件安装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包