【问题标题】:How to run bdist_wheel on Ubuntu 18.04?如何在 Ubuntu 18.04 上运行 bdist_wheel?
【发布时间】:2020-09-29 04:15:55
【问题描述】:

我有一个小的 Dockerfile,我正在尝试达到可以成功 RUN pip3 bdist_wheel 的程度。也就是说,不会出现此错误:

未知命令“bdist_wheel” - 也许你的意思是“轮子”

我已尝试安装this answer 中提到的所有内容,但没有成功。

最小的repro Dockerfile 和docker build output:

FROM ubuntu:18.04

RUN apt-get update \
    && apt-get install -qyy -o APT::Install-Recommends=false -o APT::Install-Suggests=false \
    file \
    gcc \
    python3 \
    python3-dev \
    python3-pip \
    python3-setuptools \
    python3-venv \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN pip3 install --cache-dir=/tmp/pipcache --upgrade pip && rm -rf /tmp/pipcache
RUN pip install --cache-dir=/tmp/pipcache poetry && rm -rf /tmp/pipcache

WORKDIR /src/app
RUN poetry new .
RUN poetry add gevent

输出中最相关的部分当然是

错误:无效命令“bdist_wheel”

【问题讨论】:

  • @phd 不,我试过apt-get install python3-wheelpip install wheelpip install --upgrade wheel,可能还有其他一些变化。
  • 我也试过了。现在我放弃并升级到 Ubuntu 20.04 以摆脱这种可怕的情况。
  • 没有pip bdist_wheel 命令。来自回购内部的pip wheelpython setup.py bdist_wheel
  • 你能指出这个“命令”的确切位置吗?它是 gevent repo 中的 Dockerfile 吗?
  • 我明白了,这是你得到的一个 Dockerfile - 这显然是错误的,gevent 没有任何问题。发布重现错误的最小 Dockerfile。

标签: docker pip ubuntu-18.04 python-wheel


【解决方案1】:

首先,error: invalid command 'bdist_wheel' 输出的一些注释。运行pip install <pkgname> 时,pip 将尝试找到与您的目标平台匹配的预构建轮。如果找不到,它会尝试自己构建一个轮子——下载源 dist 并运行pip wheel 来生成轮子。成功后,已安装构建的轮子。如果出现任何故障(未安装 wheel 软件包、python setup.py bdist_wheel 失败或其他任何情况),pip 将回退到第二个选项,即 distutils 安装方法:在解压缩的源 dist 上运行 python setup.py install。这是您在发布的日志中可以观察到的内容:

Failed building wheel for gevent
...
Running setup.py install for gevent: started

只有当setup.py install也失败时,安装才会无条件失败。因此,虽然pip 确实无法构建轮子 b/c,但未安装 wheel 软件包,但安装失败不是问题。您可以通过将wheel 添加到开发包来解决此问题:

RUN poetry add --dev wheel
RUN poetry add gevent

但这是可选的,不会影响构建结果。

现在,真正的错误:

Running '(cd  "/tmp/pip-build-ek9pxyw2/gevent/deps/libev"  && sh ./configure -C > configure-output.txt )' in /tmp/pip-build-ek9pxyw2/gevent
    config.status: error: in `/tmp/pip-build-ek9pxyw2/gevent/deps/libev':
    config.status: error: Something went wrong bootstrapping makefile fragments
        for automatic dependency tracking.  Try re-running configure with the
        '--disable-dependency-tracking' option to at least be able to build
        the package (albeit without support for automatic dependency tracking).
    See `config.log' for more details

Something went wrong bootstrapping makefile fragments 通常意味着您缺少make。除了其他的,安装它:

RUN apt install -y make

这样做并重新运行构建后,我遇到了最后一个错误

error: src/gevent/libev/corecext.c: No such file or directory

这是因为gevent 需要 Cython 来生成 C 扩展源。安装前先安装gevent

RUN poetry add --dev cython
RUN poetry add gevent

完整的 Dockerfile 供参考,更改为粗体:

FROM ubuntu:18.04

RUN apt-get update \
    && apt-get install -qyy -o APT::Install-Recommends=false -o APT::Install-Suggests=false \
    file \
    gcc \
    python3 \
    python3-dev \
    python3-pip \
    python3-setuptools \
    python3-venv \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN pip3 install --cache-dir=/tmp/pipcache --upgrade pip && rm -rf /tmp/pipcache
RUN pip install --cache-dir=/tmp/pipcache poetry && rm -rf /tmp/pipcache

WORKDIR /src/app
RUN poetry new .


RUN apt update
RUN apt install -y make
RUN poetry add --dev wheel cython


RUN poetry add gevent

wheelcython 都不需要实际运行 gevent,因此可以在之后安全地卸载它们以减小图像大小。

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2020-08-16
    • 2020-04-14
    • 2019-03-26
    • 2020-05-15
    • 2023-04-04
    相关资源
    最近更新 更多