【问题标题】:How do I pip install Linux packages on a Windows machine (for AWS Lambda)?如何在 Windows 机器上 pip 安装 Linux 包(对于 AWS Lambda)?
【发布时间】: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


【解决方案1】:

感谢explanation from @C.Nivs,这可以使用 Docker 交互地完成:

  1. 首先使用docker run -it python:3.6-slim bash 以交互方式运行 docker。然后创建一个文件夹“目标”并将 pip install 安装到其中(这将安装 linux 软件包)。记下容器id(我的命令行显示root@31d9be68deec:/#。容器id是31d9be68deec
mkdir /target 
pip install pandas -t /target
  1. 然后打开一个新的命令提示符并使用 docker cp 将文件从容器复制到本地。以下内容从容器中的target 文件夹复制到本地文件夹 libs。
docker cp <container_id>:/target libs

就是这样。 python 包现在在本地文件夹libs 中可用。

@C.Nivs 的注释:“COPY 并没有像它的名字所暗示的那样做。COPY 是一个构建步骤,它将文件从构建上下文(正在构建映像的位置)复制到映像本身。它没有”不能让事情走向另一边”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多