[英]Pip install -e packages don't appear in Docker
我有一个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
package 的迹象。当我尝试运行该应用程序时,它看起来像如果此 package 尚未安装。 这是构建中的相关 output:
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
我觉得这种情况很奇怪,如果有任何帮助,我将不胜感激。
我遇到了类似的问题,出现问题的一种可能方式是:
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
这为我修好了。 希望它对你有用。
@mikexstudios 是正确的,这是因为 pip 将包源存储在/usr/src/app/src
中,但是您在其上安装了一个本地目录,这意味着 python 找不到包源。
我没有更改WORKDIR
的位置,而是通过将 pip 命令更改为:
pip install -r requirements.txt --src /usr/local/src
任何一种方法都应该有效。
如果您在从 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 包
以防万一,对于会发现这个问题的其他人,上述解决方案将不起作用:对于我自己,除了按照@adrian-macneil 的建议将--src
参数添加到pip install
之外,我还必须降级从版本安装的 setuptools 模块63 至 59.6.0。
FROM nvidia/cuda:11.6.0-devel-ubuntu18.04
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y -q --no-install-recommends --fix-missing \
git \
vim \
wget \
python3.8 \
python3-pip && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN python -m pip --no-cache-dir install setuptools==59.6.0
RUN python -m pip --no-cache-dir install --upgrade wheel
RUN python -m pip --no-cache-dir install --upgrade pip
...
希望这对其他人也有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.