Docker и Apple M1

от автора

Любопытный казус привел к исследованию совместимости процессора Apple M1, и оказалось, что не все так просто…

Впрочем, обо всем по порядку. Мой коллега, владелец MacBook Pro с M1 обратился ко мне с просьбой помочь с установкой библиотеки.

У меня почти такой же MacBook, но на Intel Core i5, macOS Big Sur. При попытке поставить библиотеку

pip install qvd

ERROR: Could not find a version that satisfies the requirement qvd (from versions: none)

ERROR: No matching distribution found for qvd

Обычно такое бывает, когда в составе пакета есть какой-то модуль, несовместимый с текущей ОС. В такой ситуации первое, что я делаю — пытаюсь установить библиотеку в docker container, там у меня очень широкий выбор возможных ОС и настроек.

Dockerfile:

FROM python:3.8-slim-buster  RUN apt-get update && apt-get install -y netcat  COPY . /app WORKDIR /app  RUN pip install --upgrade pip RUN pip install -r requirements.txt  CMD ["python", "main.py"]

requirements.txt:

qvd==0.0.10

main.py:

import qvd   if __name__ == '__main__':   print('Hello, qvd')

Далее выполняем команду:

docker build -t testqvd:latest .

И оп-ля, все работает, библиотека встает, образ собирается, контейнер запускается:

docker run testqvd

Hello, qvd

Добавлю (не имеет отношения к данной теме), что библиотека работает по-настоящему, я подключал настоящие файлы и обрабатывал их этой библиотекой.

Отдаю проект коллеге, но у него не собирается!

docker -v

Docker version 20.10.7, build f0df350

У нас обоих версия docker совпадает. В чем может быть причина? Ведь выполнение кода из Dockerfile реально идет в образе python:3.8-slim-buster, он одинаковый у нас. Надо погружаться глубже, разбираться с pip

Для начала посмотрим, почему qvd не ставится на Big Sur:

pip install -vvv qvd

Эта команда выводит очень много текста, но главное, что понятно —  none of the wheel’s tags (cp37-none-win_amd64) are compatible (run pip debug —verbose to show compatible tags), таких строчек очень много и среди них встречаются только win и manylinux.

Запустим

pip debug —verbose

и получим список подходящих тэгов pip. Никаких win там, конечно, нет, а есть py32-none-macosx_10_13_x86_64 (и похожие). Всех интересующихся, что это значит отсылаю сюда: https://github.com/pypa/manylinux

Тэги совместимости не совпадают, вероятно, по веским причинам — есть библиотеки, которые не смогут запуститься на Big Sur. ОК, понятно, нет вопросов, но есть вопросы, почему при сборке образа на одной и той же ОС из одного и того же источника есть такое существенное отличие.

Добавляю в Dockerfile строчку:

FROM python:3.8-slim-buster  RUN apt-get update && apt-get install -y netcat  COPY . /app WORKDIR /app  RUN pip install --upgrade pip RUN pip debug --verbose > /tmp/pip.txt RUN pip install -r requirements.txt  CMD ["python", "main.py"]

и запускаю сборку вот такой командой:

docker build -t testqvd:latest -o /tmp/buildlogs

В результате получаю файл /tmp/buildlogs/tmp/pip.txt с результатами тэгов pip во время сборки. То же самое делает мой коллега. И они (тэги) получаются разными, у меня, например, — py38-none-manylinux_2_16_x86_64, у коллеги py37-none-manylinux_2_28_aarch64

Вот так, процессор M1 (очевидно) не совпадает с Intel Core и никакими хитрыми docker — технологиями исправить ничего нельзя. Я пока поостерегусь переходить на M1 и другим разработчикам отсоветую.


ссылка на оригинал статьи https://habr.com/ru/articles/587318/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *