为什么使用点“.”从 setup.py 安装 `install_requires` requirements.txt 在 Dockerfile 中失败?

Why does installing `install_requires` from setup.py using a dot "." in the requirements.txt fail in Dockerfile?

我正在尝试使用描述的方法here

Docker 文件

FROM python:3.8

COPY requirements.txt setup.py /tmp/
RUN pip3 install -r /tmp/requirements.txt \
    && rm /tmp/*

这失败了:

Step 1/7 : FROM python:3.8
 ---> 79cc46abd78d
Step 2/7 : COPY requirements.txt setup.py /tmp/
 ---> Using cache
 ---> a50a0a8ecb06
Step 3/7 : RUN pip3 install -r /tmp/requirements.txt     && rm /tmp/*
 ---> Running in c7d29bd8f23c
ERROR: Directory '.' is not installable. Neither 'setup.py' nor 'pyproject.toml'
 found.

我也试过注释掉RUN命令,进入容器和运行 pip3 install -r /tmp/requirements.txt 手动。这工作没有错误。

我不知道这里可能是什么问题。

我想通了:

. 不是相对于 requirements.txt 而是相对于当前工作目录。它在我手动执行时起作用的原因是,我还将我的工作区安装到一个 devcontainer 中,并将我的工作目录放在该工作区中,其中还包含 setup.py

因此解决方案是做这样的事情:

WORKDIR /tmp
COPY requirements.txt setup.py ./
RUN pip3 install -r requirements.txt \
    && rm /tmp/*