簡體   English   中英

使用Alpine Linux中隨APK安裝的Python軟件包

[英]Use Python package installed with apk in Alpine Linux

我想使用apk在Alpine Linux中安裝一些Python軟件包。 我在下面以numpy為例。

Dockerfile

FROM python:3-alpine
RUN apk add --update py3-numpy

我建立我的Docker映像

$ docker build -t python-numpy .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM python:3-alpine
 ---> 930a7e894675
Step 2/2 : RUN apk add --update py3-numpy
 ---> Running in b30470090cde
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libgcc (8.3.0-r0)
(2/6) Installing libquadmath (8.3.0-r0)
(3/6) Installing libgfortran (8.3.0-r0)
(4/6) Installing openblas (0.3.6-r0)
(5/6) Installing python3 (3.7.3-r0)
(6/6) Installing py3-numpy (1.16.4-r1)
Executing busybox-1.30.1-r2.trigger
OK: 113 MiB in 41 packages
Removing intermediate container b30470090cde
 ---> 5a82ffa67522
Successfully built 5a82ffa67522
Successfully tagged python-numpy:latest

運行它並嘗試在python中導入包

$ docker run -it --rm python-numpy python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'

但是,找不到。 apk add --update py3-numpy pip install numpy之后運行pip install numpy不會考慮apk包py3-numpy並下載另一個版本:

Collecting numpy
  Downloading https://files.pythonhosted.org/packages/da/32/1b8f2bb5fb50e4db68543eb85ce37b9fa6660cd05b58bddfafafa7ed62da/numpy-1.17.0.zip (6.5MB)
...

如果我指定的版本相同的py3-numpy (見的輸出docker build )在pip install numpy==1.16.4-r1 ,它會導致

Collecting numpy==1.16.4-r1
  ERROR: Could not find a version that satisfies the requirement numpy==1.16.4-r1 (from versions: 1.3.0, 1.4.1, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.2, 1.7.0, 1.7.1, 1.7.2, 1.8.0, 1.8.1, 1.8.2, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.10.0.post2, 1.10.1, 1.10.2, 1.10.4, 1.11.0b3, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.11.1rc1, 1.11.1, 1.11.2rc1, 1.11.2, 1.11.3, 1.12.0b1, 1.12.0rc1, 1.12.0rc2, 1.12.0, 1.12.1rc1, 1.12.1, 1.13.0rc1, 1.13.0rc2, 1.13.0, 1.13.1, 1.13.3, 1.14.0rc1, 1.14.0, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.15.0rc1, 1.15.0rc2, 1.15.0, 1.15.1, 1.15.2, 1.15.3, 1.15.4, 1.16.0rc1, 1.16.0rc2, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.17.0rc1, 1.17.0rc2, 1.17.0)
ERROR: No matching distribution found for numpy==1.16.4-r1

我想念什么?

問題在於python:3-alpine有兩個Python:一個是Alpine提供的,另一個是Python Docker映像添加的。 將軟件包安裝在一個中將不會反映在另一個中。

一些選項:

  1. 切換到僅阿爾卑斯基本圖像, FROM alpine:3.10 然后,您將通過apk安裝Python。
  2. 停止使用Alpine,並切換到FROM python:3.7-slim-buster (我個人建議: https : //pythonspeed.com/articles/base-image-python-docker-images/ )。 這樣一來,您無需安裝任何程序即可pip install numpy-二進制輪子在Alpine上不起作用,但在(Debian)Buster映像上可以工作。

將其安裝為python軟件包可以正常工作,因為基本映像是python,因此我建議您將其安裝為python軟件包。 使用alpine軟件包管理器進行安裝時,它在python軟件包或alpine軟件包中都不存在。 因此,下面將正常工作。

FROM python:3-alpine
RUN apk add g++  && \\ 
pip install numpy

現在運行容器

docker run -it --rm abc python -c "import numpy"

編輯:不建議使用這種方法,因為apk包適用於其他python版本(請參見Itamar Turner-Trauring的答案 )。


apk將python軟件包安裝在/usr/lib/python3.7/site-packages 該路徑不是Python的sys.path一部分(在Docker映像中)。 因此,找不到與apk一起安裝的軟件包。 必須將安裝目錄添加到搜索路徑

FROM python:3.7-alpine
RUN apk add --update py3-numpy
ENV PYTHONPATH /usr/lib/python3.7/site-packages

請注意,沒有/usr/lib/python3/site-packages ,即使您使用python:3.6-alpineapk add --update py3-numpy創建目錄/usr/lib/python3.7而不是/usr/lib/python3.6


順便說一句,如果您使用的是python:3 ,也會遇到類似的問題,但是安裝目錄不同

FROM python:3
RUN apt-get update && apt-get install -y python3-numpy
ENV PYTHONPATH /usr/lib/python3/dist-packages

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM