Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Windows计算机上安装Linux软件包(针对AWS Lambda)?_Python_Docker_Aws Lambda_Pip - Fatal编程技术网

Python 如何在Windows计算机上安装Linux软件包(针对AWS Lambda)?

Python 如何在Windows计算机上安装Linux软件包(针对AWS Lambda)?,python,docker,aws-lambda,pip,Python,Docker,Aws Lambda,Pip,我正在尝试编写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)的是: 我的尝试 我曾尝试使用Docker在Windows中模拟Linux环境。我的想法是在

我正在尝试编写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)的是:

我的尝试

我曾尝试使用Docker在Windows中模拟Linux环境。我的想法是在Docker中安装Linux软件包,然后将它们复制到本地机器上。我认为这可以通过Docker卷来实现。我已尝试使用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:没有这样的文件或目录

多亏了,可以使用Docker以交互方式完成此操作:

  • 首先使用
    docker run-it python:3.6-slim bash交互式运行docker
    。然后创建一个文件夹“target”,并将pip安装到其中(这将安装linux软件包)。记下容器id(我的命令行显示root@31d9be68deec:/#。容器id为
    31d9be68deec
  • 然后打开一个新的命令提示符,并使用docker cp将文件从容器复制到本地。以下内容从容器中的
    目标
    文件夹复制到本地文件夹libs
  • docker cp:/target libs
    
    就这样。python包现在位于本地文件夹
    libs

    @C.Nivs中的注释:“复制并不做它的名字可能暗示的事情。复制是一个构建步骤,它将文件从构建上下文(正在构建映像的位置)复制到映像本身。它不允许事情以相反的方式进行。”

    由于,可以使用Docker以交互方式完成此操作:

  • 首先使用
    docker run-it python:3.6-slim bash交互式运行docker
    。然后创建一个文件夹“target”,并将pip安装到其中(这将安装linux软件包)。记下容器id(我的命令行显示root@31d9be68deec:/#。容器id为
    31d9be68deec
  • 然后打开一个新的命令提示符,并使用docker cp将文件从容器复制到本地。以下内容从容器中的
    目标
    文件夹复制到本地文件夹libs
  • docker cp:/target libs
    
    就这样。python包现在位于本地文件夹
    libs


    @C.Nivs中的注释:“复制并不做它的名字可能暗示的事情。复制是一个构建步骤,它将文件从构建上下文(正在构建映像的地方)复制到映像本身。它不允许事情以另一种方式进行。”

    本地是否存在
    /usr/src/app/lib
    ?我认为
    复制
    不会以完整路径运行(假设您正在运行docker build.-t一些图片),因为它只会在当前构建上下文中查找。因此,即使windows环境中确实存在
    /usr/src/app/lib
    ,它也不会找到它/usr/src/app/lib是Docker容器内的路径。
    pip3 install
    命令工作正常。我正在尝试复制Docker容器内的文件夹(/usr/src/app/lib)到Windows文件夹(“主机”)“主机”目录确实存在。@maurera不,
    COPY
    是该命令的工作方式。您正在主机上按当前的编写方式查找
    /usr/src/app/lib
    。您可能正在查找
    RUN mv/usr/src/app/lib/host/
    。我会检查这是否真的有效,因为我怀疑tbhDoes
    /usr/src/app/lib
    本地存在?我认为
    COPY
    不会以完整路径运行(假设您正在运行
    docker build.-t一些图片
    ),因为它只会在当前构建上下文中查找。因此,即使windows环境中确实存在
    /usr/src/app/lib
    ,它也不会找到它/usr/src/app/lib是Docker容器内的路径。
    pip3 install
    命令工作正常。我正在尝试复制Docker容器内的文件夹(/usr/src/app/lib)到Windows文件夹(“主机”)“主机”目录确实存在。@maurera不,
    COPY
    是该命令的工作方式。您正在主机上按当前的编写方式查找
    /usr/src/app/lib
    。您可能正在查找
    RUN mv/usr/src/app/lib/host/
    。我会检查这是否真的有效,因为我怀疑tbh
    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
    
    mkdir /target 
    pip install pandas -t /target
    
    docker cp <container_id>:/target libs