【发布时间】:2020-06-21 13:47:21
【问题描述】:
我正在尝试编写 Python AWS Lambda 脚本。 Python 代码在 Windows 本地运行,但它使用通过 pip 安装的 Windows 包。上传到 AWS Lambda 时,我需要包含 Linux 软件包。
例如,当我运行 pip install pandas 时,我得到:
Downloading pandas-1.0.1-cp37-cp37m-win_amd64.whl
但我需要(上传到 AWS Lambda)是:
pandas-1.0.1-cp37-cp37m-manylinux1_x86_64.whl
我的尝试
我曾尝试使用 Docker 在 Windows 中模拟 Linux 环境。我的想法是在 Docker 中 pip 安装 Linux 包,然后将它们复制到我的本地机器上。我认为这可以通过 Docker Volume 来完成。我曾尝试使用 Dockerfile 来做到这一点:
FROM python:3.7-slim-buster
WORKDIR /usr/src/app
# Download python packages to /usr/src/app/lib
RUN mkdir -p /usr/src/app/lib
RUN pip3 install pandas -t /usr/src/app/lib
# Copy the python pacakges to local machine
VOLUME host:/myvol
RUN mkdir /myvol
COPY /usr/src/app/lib /myvol
但是当我运行 docker build 时出现错误:
复制失败:stat /var/lib/docker/tmp/docker-builder233015161/usr/src/app/lib:没有这样的文件或目录
【问题讨论】:
-
本地是否存在
/usr/src/app/lib? -
我认为
COPY不会以完整路径运行(假设您正在运行docker build . -t some_image),因为它只会查看当前的构建上下文。所以即使/usr/src/app/lib确实存在于你的windows环境中,它也不会找到它 -
/usr/src/app/lib 是 Docker 容器内的路径。
pip3 install命令工作正常。我正在尝试将 Docker 容器(/usr/src/app/lib)内的文件夹复制到 Windows 文件夹('host')。 'host' 目录确实存在。 -
@maurera no,
COPY <host_path> <container_path>是命令的工作方式。您正在以当前编写的方式在主机上查找/usr/src/app/lib -
您可能正在寻找
RUN mv /usr/src/app/lib /host/。我会检查一下这是否真的有效,因为我对此表示怀疑
标签: python docker aws-lambda pip