如何摆脱密码学构建错误?
我正在尝试构建一个 dockerfile,但问题是当它尝试构建专门的加密时没有构建。
我的 Dockerfile
FROM python:3.7-alpine
ENV PYTHONUNBUFFERED 1
RUN apk update
# psycopg2 dependencies
&& apk add --virtual build-deps gcc python3-dev musl-dev
&& apk add postgresql-dev
&& apk add build-base
# Pillow dependencies
&& apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev
# CFFI dependencies
&& apk add libffi-dev py-cffi
# Translations dependencies
&& apk add gettext
# https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell
&& apk add postgresql-client
# cairo
&& apk add cairo cairo-dev pango-dev gdk-pixbuf-dev poppler-utils
# fonts for weasyprint
RUN mkdir ~/.fonts
COPY ./fonts/* /root/.fonts/
# secret key (should be in docker-secrets, or we need to run minikube locally
RUN mkdir /etc/secrets
COPY secret.readme proxy_rsa_key* /etc/secrets/
# Requirements are installed here to ensure they will be cached.
COPY ./requirements /requirements
RUN pip install -r /requirements/local.txt
COPY ./compose/local/django/entrypoint /entrypoint
RUN sed -i 's/r//' /entrypoint
RUN chmod +x /entrypoint
COPY ./compose/local/django/start /start
RUN sed -i 's/r//' /start
RUN chmod +x /start
COPY ./compose/local/django/celery/worker/start /start-celeryworker
RUN sed -i 's/r//' /start-celeryworker
RUN chmod +x /start-celeryworker
COPY ./compose/local/django/celery/beat/start /start-celerybeat
RUN sed -i 's/r//' /start-celerybeat
RUN chmod +x /start-celerybeat
COPY ./compose/local/django/celery/flower/start /start-flower
RUN sed -i 's/r//' /start-flower
RUN chmod +x /start-flower
WORKDIR /app
ENTRYPOINT ["/entrypoint"]
当我尝试构建我的 dockerfile 时,它显示:
Building wheel for cryptography (PEP 517): finished with status 'error'
ERROR: Command errored out with exit status 1:
error: Can not find Rust compiler
----------------------------------------
ERROR: Failed building wheel for cryptography
我试图解决,但我不能。我是 docker 新手。请帮助解决这个问题。
回答
密码学 < 3.5:
您可以通过在 apk add 命令之前添加以下行来跳过 Rust 安装和其他相关依赖项:
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1
密码 >= 3.5 : 谢谢@riptusk331
在此版本之后将需要rust 。安装特定版本 <3.5 或遵循加密安装说明。在附加的链接中指出,它们在文档中得到了非常积极的解释。
- After spending a whole day looking at a whole new set of weird problems, this fixed my problem. Thanks a lot!!!
- While this may fix some folks' immediate problems, this is a bad answer that sets people up for future issues. If you're going to suggest bypassing the Rust build entirely, can you explain why? OP is using the 3.7-alpine image, which supports Rust (it's Alpine v3.13). As @larsks suggests in their answer, just install the compiler & package manager (`rust` and `cargo`) and this works fine. Cryptography 3.5+ will start [requiring](https://github.com/pyca/cryptography/issues/5771#issuecomment-775016788) Rust...so you're just punting the issue here.
回答
由于错误是...
error: Can not find Rust compiler
...解决方案是安装 rust 编译器。您还需要
cargo,Rust 包管理器,但看起来您Dockerfile
缺少openssl-dev.
以下为我成功构建:
FROM python:3.7-alpine
ENV PYTHONUNBUFFERED 1
RUN apk add --update
build-base
cairo
cairo-dev
cargo
freetype-dev
gcc
gdk-pixbuf-dev
gettext
jpeg-dev
lcms2-dev
libffi-dev
musl-dev
openjpeg-dev
openssl-dev
pango-dev
poppler-utils
postgresql-client
postgresql-dev
py-cffi
python3-dev
rust
tcl-dev
tiff-dev
tk-dev
zlib-dev
RUN pip install cryptography
请注意,上面的apk add ...命令行与您所拥有的基本相同;我只是将多个apk add ...
语句简化为单个apk add执行。
- Oh, but also see this exciting issue: https://github.com/pyca/cryptography/issues/5771
- Thanks. The problem is now solved. Btw can you tell me what cargo and rust do?
回答
有些人可能会来这里(就像我一样)寻找 Python 的修复程序,不一定是 Alpine。
有几个选项可用,在github 问题 中提到。(只选其中之一)
- 您可以安装锈,正如提到的另一个答案
- 您可以将
cryptography版本降级到 3.4.x - 您可以升级到 pip 版本 19.1.1 或更高版本,它会安装预编译包
- I'm using pip 21.0.1 and it fails to build. I don't even want to build it... I'm just installing wheel but it has cryptography as dependency.