简体   繁体   中英

Failed to install pyorc on alpine docker container

Getting compilation error - which is dependent on ORC binaries.

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

If I compile apache-orc separately then too, how can I give reference of it to PyOrc Pip Installation?

Anyone has any solution or idea how can we install pyorc package inside alpine container.

I'm having trouble with alpine image with ubuntu and normal python docker image its working well.

Docker Image: FROM python:3.7-alpine

I used Docker multi-stage builds:

# 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 .

and it seems working:

$ 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'ORC\x1d\x00\x00\n\x0c\n\x04\x00\x00\x.....'

Author Noirello , has given me the guidelines/direction as below:

For Alpine, have to install it from source. There are some instructions in the docs how to do it: pyOrc-Docs

I'd use a multi-staged Dockerfile to build pyorc, then install the wheel into a clean Alpine image with the rest of your application.

Something like this:

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...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM