سلام
من به پکیج pyqt5 روی یک سیستم arm64 نیاز دارم. از اونجایی که نتونستم pyqt5 رو نصب کنم تصمیم گرفتم بصورت داکر ازش استفاده کنم. ایمیج آماده که بدردبخور هم باشه براش موجود نیست پس تصمیم گرفتم خودم یکی درست کنم.
اول سعی کردم روی همون سیستم arm64 اینکارو انجام بدم. از ایمیج robd003/python3.9 که arm64 هست به عنوان base استفاده کردم تا پکیج pyqt5 رو روش نصب و ایمیج موردنظرم رو بسازم.
Dockerfile
FROM robd003/python3.9:latest
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./brightness.py" ]
در حین build کردن در مرحله ی نصب pyqt5, همون خطایی رو داد که موقع نصب pyqt5 به صورت مستقیم به وجود میمومد. یعنی در حین نصب dependency ها با خطا روبرو میشد. از اونجایی که توی این تاپیک سوالم روی داکر تمرکز داره از این خطا میگذریم!
تصمیم گرفتم روی یک سیستم amd64 که pyqt5 بدون مشکل نصب میشه, ایمیج مذکور رو درست کنم. دوباره از ایمیج robd003/python3.9 که arm64 هست به عنوان base استفاده کردم... فقط در مرحله build کردن نوع پلتفرم رو arm64 تعیین کردم:
sudo docker buildx build --platform linux/arm64/v8 -t python-pyqt5 .
و نتیجه:
=> [internal] load build definition from Dockerfile 1.1s
=> => transferring dockerfile: 215B 0.0s
=> [internal] load .dockerignore 0.8s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/robd003/python3.9:latest 5.9s
=> [1/5] FROM docker.io/robd003/python3.9:latest@sha256:83a53d5562f108cb28542640b3c2d7f28f9f7d92ae1092631df764ceedae5478 2181.6s
=> => resolve docker.io/robd003/python3.9:latest@sha256:83a53d5562f108cb28542640b3c2d7f28f9f7d92ae1092631df764ceedae5478 0.6s
=> => sha256:83a53d5562f108cb28542640b3c2d7f28f9f7d92ae1092631df764ceedae5478 743B / 743B 0.0s
=> => sha256:807151d56a532ce425d89fcb55f511c4a923db6a10f287cc178fd7787b8c96fd 2.22kB / 2.22kB 0.0s
=> => sha256:d2104654b7835dbce5a0128718f16319d6980fc9b3d4c9122f32549848304bb7 8.05kB / 8.05kB 0.0s
=> => sha256:741eb94195433e00f9799629cc66740c97d607d6f3ed207e5738995897c52959 49.22MB / 49.22MB 465.0s
=> => sha256:dd0317c7db28bd6855b787608d1f4236185907b452f6f545a9954be870828af6 9.77MB / 9.77MB 217.6s
=> => sha256:d098cf33298807975a4d84f59f6689e0bf729b62fca9b7320adb80ebeaabc578 7.70MB / 7.70MB 103.0s
=> => sha256:e4301bfae0dab5df877b31fde90c919b02335f783b7405d66b6123acfe03e69e 52.17MB / 52.17MB 670.9s
=> => sha256:e9bc033bade497e8cb28905b968cf86a903cd263101247f4089023659a66d87c 183.99MB / 183.99MB 2152.8s
=> => extracting sha256:741eb94195433e00f9799629cc66740c97d607d6f3ed207e5738995897c52959 2.0s
=> => sha256:6d6161a44d8a9c4917cae94daa886ec9b382ea1728a9042dc8d5fb900b5f3700 6.02MB / 6.02MB 523.0s
=> => extracting sha256:d098cf33298807975a4d84f59f6689e0bf729b62fca9b7320adb80ebeaabc578 0.3s
=> => extracting sha256:dd0317c7db28bd6855b787608d1f4236185907b452f6f545a9954be870828af6 0.3s
=> => sha256:88b803109595c09ad3a95e0d2ce4a89c63493dd02ef5d706d29296bb13484bbb 54.51MB / 54.51MB 949.2s
=> => extracting sha256:e4301bfae0dab5df877b31fde90c919b02335f783b7405d66b6123acfe03e69e 2.5s
=> => sha256:70d07175aa71e8eac45337db7e31ffcd9936005f527c9a958ea56ddd36d2a09a 240B / 240B 672.6s
=> => sha256:9cf8333bf95d8d1af7e207639fe0257ae47b3411d004d2dc3c404e509e7c78d0 2.52MB / 2.52MB 687.9s
=> => extracting sha256:e9bc033bade497e8cb28905b968cf86a903cd263101247f4089023659a66d87c 7.0s
=> => extracting sha256:6d6161a44d8a9c4917cae94daa886ec9b382ea1728a9042dc8d5fb900b5f3700 0.3s
=> => extracting sha256:88b803109595c09ad3a95e0d2ce4a89c63493dd02ef5d706d29296bb13484bbb 1.5s
=> => extracting sha256:70d07175aa71e8eac45337db7e31ffcd9936005f527c9a958ea56ddd36d2a09a 0.0s
=> => extracting sha256:9cf8333bf95d8d1af7e207639fe0257ae47b3411d004d2dc3c404e509e7c78d0 0.2s
=> [internal] load build context 0.7s
=> => transferring context: 1.47kB 0.0s
=> [2/5] WORKDIR /usr/src/app 1.4s
=> [3/5] COPY requirements.txt ./ 0.9s
=> ERROR [4/5] RUN pip install --no-cache-dir -r requirements.txt 1.6s
------
> [4/5] RUN pip install --no-cache-dir -r requirements.txt:
#0 1.179 exec /bin/sh: exec format error
------
ERROR: failed to solve: executor failed running [/bin/sh -c pip install --no-cache-dir -r requirements.txt]: exit code: 1
همینطور که میبینید بازهم خطا گرفت و با سرچی که کردم اینطور فهمیدم که بخاطر استفاده از ایمیج robd003/python3.9 که arm64 هست روی یک سیستم با معماری amd64 این خطا رخ داده.
از ایمیج pyqt5 برپایه amd64 روی سیستم arm64 هم استفاده کردم و سعی کردم در حین اجرا با استفاده از فلگ پلتفورم این تفاوت رو هندل کنم اما باز خطا میگرفتم
docker run --rm -ti --platform linux/amd64 pyqt5
پیشنهادتون چی هست دوستان؟
ممکنه همه مشکلات بخاطر عدم پشتیبانی pyqt5 از سیستم های aarch64/v8 باشه؟