如何摆脱密码学构建错误?

我正在尝试构建一个 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 问题 中提到。(只选其中之一)

  1. 您可以安装锈,正如提到的另一个答案
  2. 您可以将cryptography版本降级到 3.4.x
  3. 您可以升级到 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.

以上是如何摆脱密码学构建错误?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>