gpt4 book ai didi

python - 如何在 Alpine Linux 容器上安装 pyzmq?

转载 作者:行者123 更新时间:2023-12-04 22:55:05 28 4
gpt4 key购买 nike

我有一个带有 python:3.6-alpine 的容器核心。我在安装 pyzmq 时遇到问题通过 pip对此:
Dockerfile:

FROM python:3.6-alpine

RUN mkdir /code
RUN apk add vim
WORKDIR /
ADD . /code

docker-compose.yml:
version: '3'

services:
battery_monitoring:
build: .
image: bm:1.0.0
container_name: battery_monitoring
restart: unless-stopped
volumes:
- .:/code
tty: true

当我在这个容器上安装几个 Python 库时,我没有任何问题,但是 pyzmq库,有一个错误:
程序:
$ docker-compose build
$ docker-compose up -d
$ docker exec -it <This-container-ID> sh
在容器中:
pip install pyserial
pip install easydict
以上包安装正确,但是 pyzmq安装出现以下错误:
pip install pyzmq
结果的一部分:
    ----------------------------------------
Command "/usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-545my4q5/pyzmq/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-nbtsgz0b/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-545my4q5/pyzmq/

[ 注意 ]:
pip -V
pip 18.0 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

which pip
/usr/local/bin/pip
  • 使用 python:3.6-slim 没有任何问题而不是 python:3.6-alpine
  • 最佳答案

    使用 py3-zmq包裹

    根据我的经验,python:3.6-alpine由于缺少 Python header ,因此不太适合安装带有 C 扩展的包。 alpine图像已经提供了一个 Python 3.6 发行版和一个 precompiled pyzmq package ,所以它已经足够了:

    FROM alpine:edge

    RUN apk update && apk add py3-zmq

    CMD ["/bin/sh"]

    查看:

    $ docker run --rm -it my/alpine /bin/sh
    / # python3 -c "import zmq; print(zmq.__version__)"
    17.1.0

    这是最简单、最可靠的安装方式 pyzmq在 Alpine 容器中。

    从源头构建 pip install
    Alpine 与 manylinux1 不兼容,因此任何包含 C 扩展的包都必须从源代码构建。这意味着您必须先安装构建工具。同样,我会使用 alpine图像而不是 python:3.6-alpine :
    FROM alpine:edge

    RUN apk update && apk add build-base libzmq musl-dev python3 python3-dev zeromq-dev

    RUN pip3 install pyzmq

    # reduce image size by cleaning up the build packages
    RUN apk del build-base musl-dev python3-dev zeromq-dev

    CMD ["/bin/sh"]

    查看:

    $ docker run --rm -it my/alpine /bin/sh
    / # python3 -c "import zmq; print(zmq.__version__)"
    17.1.0

    如果你坚持 python:3.6-alpine
    当心 python:3.6-alpine不通过 apk 安装 Python ,它具有从源代码构建的 Python 并位于 /usr/local 下。 .所以当你从 python:3.6-alpine 继承时, 安装 python3-dev并运行 pip install pyzmq ,你最终会 build pyzmq对于 Python 3.6.6(来自 python:3.6-alpine),使用来自 Python 3.6.4(来自 apk add python3-dev)的头文件。一般来说,这应该不是问题(头文件仅在主要 Python 版本之间不兼容),但如果头文件被发行版维护者改编,则可能会成为问题。

    编辑:使用日志重现的确切步骤
    $ docker image rm my/alpine:latest
    Untagged: my/alpine:latest
    Deleted: sha256:2e613cdc3c90c9d44b23d399bd44069217e5b31c1b4a8fc91e501c5226a4ef6a
    Deleted: sha256:d66ac6c96a4fca9c4fe71a73b64a4dd3605a59e570f327974954649b633a7fc5
    Deleted: sha256:114efba5527eb4ab23020ef84b6181b6a6ba790059b83ce046c9a1a6c0bdf419

    $ docker image prune
    WARNING! This will remove all dangling images.
    Are you sure you want to continue? [y/N] y
    Deleted Images:
    untagged: alpine@sha256:79c2c5f6db53da44f90bb2731f29f725b5b14c378407a123776b6d3c76e6aebe
    untagged: alpine@sha256:ae8a1f9146d74466ddf1def02088ba33544db9aceef01f4b388c674a5ad1d00b
    deleted: sha256:5c4fa780951b060bb0a75355765bc58112350d9974970d60561671d552aaf2e2
    deleted: sha256:c9e8b5c053a2dda62373bc57fa8cb634230a92ba5f02d2baf5d35b932d04a878

    Total reclaimed space: 4.148MB

    $ cat ./Dockerfile
    FROM alpine:edge

    RUN apk update && apk add py3-zmq

    CMD ["/bin/sh"]

    $ docker pull alpine:edge
    edge: Pulling from library/alpine
    a0710691c81a: Pull complete
    Digest: sha256:8d9872bf7dc946db1b3cd2bf70752f59085ec3c5035ca1d820d30f1d1267d65d
    Status: Downloaded newer image for alpine:edge

    $ docker build -t my/alpine .
    Sending build context to Docker daemon 3.072kB
    Step 1/3 : FROM alpine:edge
    ---> 9d1f27787d39
    Step 2/3 : RUN apk update && apk add py3-zmq
    ---> Running in 0f9bd971b5da
    fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
    v3.8.0-1447-g6c9915aaa5 [http://dl-cdn.alpinelinux.org/alpine/edge/main]
    v3.8.0-1459-g2ff55fde23 [http://dl-cdn.alpinelinux.org/alpine/edge/community]
    OK: 9626 distinct packages available
    (1/16) Installing libbz2 (1.0.6-r6)
    (2/16) Installing expat (2.2.5-r0)
    (3/16) Installing libffi (3.2.1-r4)
    (4/16) Installing gdbm (1.13-r1)
    (5/16) Installing xz-libs (5.2.4-r0)
    (6/16) Installing ncurses-terminfo-base (6.1-r0)
    (7/16) Installing ncurses-terminfo (6.1-r0)
    (8/16) Installing ncurses-libs (6.1-r0)
    (9/16) Installing readline (7.0.003-r0)
    (10/16) Installing sqlite-libs (3.24.0-r1)
    (11/16) Installing python3 (3.6.4-r1)
    (12/16) Installing libgcc (6.4.0-r8)
    (13/16) Installing libsodium (1.0.16-r0)
    (14/16) Installing libstdc++ (6.4.0-r8)
    (15/16) Installing libzmq (4.2.3-r0)
    (16/16) Installing py3-zmq (17.1.0-r0)
    Executing busybox-1.28.4-r0.trigger
    OK: 69 MiB in 29 packages
    Removing intermediate container 0f9bd971b5da
    ---> 83a4db72581d
    Step 3/3 : CMD ["/bin/sh"]
    ---> Running in b37e3ef8e639
    Removing intermediate container b37e3ef8e639
    ---> 558bd6427c77
    Successfully built 558bd6427c77
    Successfully tagged my/alpine:latest

    $ docker run --rm -it my/alpine python3 -c "import zmq; print(zmq.__version__)"
    17.1.0

    关于python - 如何在 Alpine Linux 容器上安装 pyzmq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51915174/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com