ไม่สามารถติดตั้งการพึ่งพา python บางอย่างได้

Dec 27 2020

ฉันคิดไม่ออกว่าทำไมเมื่อติดตั้ง python dependencies จาก requirements.txt pip ไม่บ่น แต่เมื่อฉันทำจากคอนเทนเนอร์นักเทียบท่าฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

เนื้อหา Requirement.txt:

Flask~=1.1
grpcio
grpcio-tools
protobuf
iexfinance
numpy
pandas
pandas_datareader
pymongo

ฉันได้สร้างคอนเทนเนอร์ของฉันดังนี้:

docker run -it -p 8080:50051 -v ${pwd}:/app -w "/app" python:3.8-alpine

ฉันพยายามติดตั้งการอ้างอิงโดยใช้คำสั่งนี้:

pip install -r requirements.txt

ภาพหน้าจอบางส่วนร้อง:

คำตอบ

2 jakub Dec 27 2020 at 04:59

Alpine Linux ใช้ musl C แต่ไฟล์ python wheel ส่วนใหญ่ถูกคอมไพล์สำหรับ glib C ดังนั้นจึงต้องคอมไพล์แพ็กเกจที่มีนามสกุลที่เขียนด้วยภาษา C / C ++ หากคุณไม่ได้ติดตั้งคอมไพเลอร์คุณจะได้รับข้อผิดพลาด

แทนที่จะติดตั้งคอมไพเลอร์และการอ้างอิงที่แพ็คเกจอาจต้องใช้ในเวลาคอมไพล์ฉันขอแนะนำให้ใช้อิมเมจนักเทียบท่าหลามที่ไม่ได้ใช้ Alpine ตัวอย่างเช่นคุณสามารถใช้python:3.8-slimหรือpython:3.8และแพคเกจ python ที่จัดส่งล้อลินุกซ์จะไม่ต้องคอมไพล์ ทั้งหมดของแพคเกจที่ระบุไว้ใน OP สามารถติดตั้งจากล้อก่อนรวบรวมถ้าใช้requirements.txtpython:3.8-slim

ดังนั้นคุณสามารถใช้คำสั่งเหล่านี้

docker run -it -p 8080:50051 -v ${pwd}:/app -w "/app" python:3.8-slim
pip install -r requirements.txt

หากคุณกังวลเกี่ยวกับขนาดของภาพที่ได้คุณยังสามารถใช้--no-cache-dirแฟล็กpip installเพื่อปิดใช้งานการแคช

MselmiAli Dec 27 2020 at 05:00

วิธีแก้ปัญหาคือการอัปเดต alpine-SDK ซึ่งเป็น "meta-package" ที่ดึงแพ็คเกจที่จำเป็นมาใช้ในการสร้างแพ็คเกจใหม่ "

apk add --update alpine-sdk

ฉันพบวิธีแก้ปัญหาที่นี่:

Github: ปัญหานักเทียบท่าอัลไพน์