Không thể cài đặt một số phụ thuộc trong python request.txt

Dec 27 2020

Tôi không thể tìm ra lý do tại sao khi cài đặt các phần phụ thuộc python của mình từ request.txt pip không khiếu nại, nhưng khi tôi thực hiện điều đó từ vùng chứa docker, tôi nhận được thông báo lỗi sau:

Nội dung tệp tin yêu cầu:

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

Tôi đã tạo vùng chứa của mình như dưới đây:

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

Tôi đã cố gắng cài đặt các phần phụ thuộc của mình bằng lệnh này:

pip install -r requirements.txt

Dưới đây là một số ảnh chụp màn hình:

Trả lời

2 jakub Dec 27 2020 at 04:59

Alpine Linux sử dụng musl C, nhưng hầu hết các tệp bánh xe python được biên dịch cho glib C. Do đó, các gói có phần mở rộng được viết bằng C / C ++ cần được biên dịch. Nếu bạn chưa cài đặt trình biên dịch, bạn sẽ gặp lỗi.

Thay vì cài đặt trình biên dịch và các phụ thuộc mà các gói có thể yêu cầu tại thời điểm biên dịch, tôi khuyên bạn nên sử dụng hình ảnh python Docker không dựa trên Alpine. Ví dụ: bạn có thể sử dụng python:3.8-slimhoặc python:3.8, và các gói python vận chuyển bánh xe Linux sẽ không phải biên dịch. Tất cả các gói được liệt kê trong OP requirements.txtcó thể được cài đặt từ các bánh xe được biên dịch trước nếu sử dụng python:3.8-slim.

Vì vậy, bạn có thể sử dụng các lệnh này

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

Nếu bạn lo lắng về kích thước của hình ảnh kết quả, bạn cũng có thể sử dụng --no-cache-dircờ trong pip installđể tắt bộ nhớ đệm.

MselmiAli Dec 27 2020 at 05:00

Giải pháp là cập nhật alpine-SDK, là một "siêu gói" lấy các gói thiết yếu được sử dụng để xây dựng các gói mới. "

apk add --update alpine-sdk

Tôi đã tìm thấy giải pháp ở đây:

Github: Các vấn đề về núi cao do docker