ไม่สามารถติดตั้งการพึ่งพา python บางอย่างได้
ฉันคิดไม่ออกว่าทำไมเมื่อติดตั้ง 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
ภาพหน้าจอบางส่วนร้อง:
คำตอบ
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เพื่อปิดใช้งานการแคช
วิธีแก้ปัญหาคือการอัปเดต alpine-SDK ซึ่งเป็น "meta-package" ที่ดึงแพ็คเกจที่จำเป็นมาใช้ในการสร้างแพ็คเกจใหม่ "
apk add --update alpine-sdk
ฉันพบวิธีแก้ปัญหาที่นี่:
Github: ปัญหานักเทียบท่าอัลไพน์