获取编译错误 - 这取决于ORC二进制文件。
In file included from src/_pyorc/_pyorc.cpp:1:
src/_pyorc/Reader.h:7:10: fatal error: 'orc/OrcFile.hh' file not found
#include "orc/OrcFile.hh"
^~~~~~~~~~~~~~~~
1 error generated.
error: command 'clang' failed with exit status 1
如果我单独编译apache-orc,那么我如何将其引用到 PyOrc Pip 安装?
任何人都有任何解决方案或想法,我们如何在高山容器内安装pyorc软件包。
我在使用 ubuntu 和普通的 python docker 映像时遇到问题,它运行良好。
码头工人图片:FROM python:3.7-alpine
我使用了Docker多阶段构建:
# Dockerfile
FROM python:3.7.3
WORKDIR /app
RUN pip install pyorc -t .
FROM python:3.7.3-alpine
WORKDIR /app
RUN apk add --no-cache --virtual .build-deps g++ musl-dev gcompat
COPY --from=0 /app .
它似乎有效:
$ docker build -t test .
$ docker run -it --rm test python
Python 3.7.3 (default, Jun 27 2019, 22:53:21)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyorc
>>>
>>> with open("./new_data.orc", "wb") as data:
... with pyorc.Writer(data, "struct<col0:int,col1:string>") as writer:
... writer.write((1, "ORC from Python"))
...
>>> from pathlib import Path
>>> Path("./new_data.orc").read_bytes()
b'ORCx1dx00x00nx0cnx04x00x00x.....'
作者Noirello给了我如下的指导方针/方向:
对于阿尔卑斯山,必须从源代码安装它。 文档中有一些说明如何做到这一点:pyOrc-Docs
我会使用多阶段的 Dockerfile 来构建 pyorc,然后将轮子与应用程序的其余部分一起安装到干净的 Alpine 映像中。
像这样:
FROM python:3.8.3-alpine AS builder
RUN apk add gcc g++ musl-dev cmake make
ARG VERSION=0.3.0
RUN mkdir build
WORKDIR /build
RUN pip install pybind11 wheel
RUN pip download --no-binary :all: --no-deps pyorc==${VERSION} && tar -xvf *.tar.gz
RUN cd pyorc-${VERSION} && python3 setup.py build_orc
RUN cd pyorc-${VERSION} && python3 setup.py bdist_wheel
FROM python:3.8.3-alpine
ARG VERSION=0.3.0
COPY --from=builder /build/pyorc-${VERSION}/dist/pyorc-${VERSION}-*.whl /tmp/
# Adding libstdc++, because the wheel expects that the libstdc++.so is presented on the system.
# Adding tzdata, because the ORC C++ lib needs to have a localtime set.
RUN apk add libstdc++ tzdata
# Setting localtime to UTC.
RUN ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime
RUN pip install /tmp/pyorc-${VERSION}-*.whl && rm -rf /tmp/pyorc-${VERSION}-*.whl
# Rest of your custom image...