Как стать автором
Обновить

Docker и Apple M1

Время на прочтение2 мин
Количество просмотров28K

Любопытный казус привел к исследованию совместимости процессора 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 и другим разработчикам отсоветую.

Теги:
Хабы:
-34
Комментарии13

Публикации