Как мне установить Linux пакеты на компьютере Windows (для AWS Lambda)? - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь написать Python AWS Лямбда-скрипт. Код Python работает локально в Windows, но он использует Windows пакетов , установленных через pip. При загрузке в 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 для имитации Linux среда в Windows. Моя идея - установить пакеты Linux в Docker и скопировать их на мой локальный компьютер. Я думаю, что это можно сделать через 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, я получаю сообщение об ошибке:

COPY не удалось: stat / var / lib / docker / tmp / docker -builder233015161 / usr / src / app / lib: нет такого файла или каталога

1 Ответ

0 голосов
/ 09 марта 2020

Благодаря объяснению от @ C .Nivs это можно сделать, используя Docker в интерактивном режиме:

  1. Первый запуск docker в интерактивном режиме с docker run -it python:3.6-slim bash. Затем создайте папку 'target' и установите pip в нее (это установит пакеты linux). Запишите идентификатор контейнера (моя командная строка показывает root@31d9be68deec: / #. Идентификатор контейнера 31d9be68deec)
mkdir /target 
pip install pandas -t /target
Затем откройте новую командную строку и используйте docker cp для копирования файлов из контейнера в локальный. Следующие копии из папки target в контейнере в локальную папку libs.
docker cp <container_id>:/target libs

Вот и все. Пакеты python теперь доступны в локальной папке libs.

Примечание от @ C .Nivs: «COPY не делает то, что может предложить его имя. COPY - это шаг сборки, который копирует файлы из контекста сборки (где создается изображение) в само изображение. Это не позволяет go другим способом ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...