gpt4 book ai didi

docker - 如何在Ubuntu 18.04上运行bdist_wheel?

转载 作者:行者123 更新时间:2023-12-02 20:57:24 28 4
gpt4 key购买 nike

我有一个小的Dockerfile,正在尝试达到可以成功RUN pip3 bdist_wheel的地步。也就是说,没有得到这个错误:

unknown command "bdist_wheel" - maybe you meant "wheel"



我尝试安装 this answer中提到的所有内容,但是没有运气。

最少的propro 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

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

error: invalid command 'bdist_wheel'

最佳答案

首先,介绍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

实际运行 wheel不需要 cythongevent,因此以后可以安全地卸载它们以减小图像大小。

关于docker - 如何在Ubuntu 18.04上运行bdist_wheel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62291872/

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