2020. 2. 16. 00:15ㆍTrouble Shooting
distutils.errors.CompileError: command 'gcc' failed with exit status 1
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c
'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nfup7a1n/grpcio/setup.py'"'"';
__file__='"'"'/tmp/pip-install-nfup7a1n/grpcio/setup.py'"'"';
f=getattr(tokenize, '"'"'open'"'"', open)(__file__);
code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');
f.close();exec(compile(code, __file__, '"'"'exec'"'"'))'
install --record /tmp/pip-record-vkk5ld71/install-record.txt
--single-version-externally-managed --compile --install-headers
/usr/local/include/python3.6m/grpcio Check the logs for full command output.
alpine linux에서는 google-colud-logging 을 사용하려고 grpcio를 설치하다가 오류가 발생하는데
gcc에서 컴파일을 하다가 실패합니다.
구글을 통해 github issue들을 검색해보면 musl 이라는 alpine 리눅스의 패키지에서 오류가 발생한다고 합니다.
이를 해결하기 위해서는 뭐 grpcio를 pip로 추가설치해라 grpcio-tools를 설치하라 말이 많은데
결론은 둘다 안됩니다.
제가 선택한 해결방안은 컴파일 에러기 때문에, musl-dev는 당연히 패키지에 포함되어야 했었고,
gcc도 물론이거니와, 추가로 g++을 추가해주었는데 핵심은 g++을 통해서 설치가 가능했던것 같습니다.
물론 pip 인스톨 전에 pip를 최신으로 업그레이드 하는 과정도 진행했었고요.
# Dockerfile
RUN pip3 install --upgrade pip && pip3 install -r requirements.txt
RUN apk add --no-cache \
gcc \
g++ \
make \
musl-dev \
python3-dev
저의 경우는 Dockerfile 을 multistatging을 사용했는데 핵심 요소만 살펴보자면
pip를 최신으로 업데이트 후 의존성을 설치했고,
alpine 리눅스에 복제할때 gcc, g++, make, musl-dev, python3-dev를 add하여 진행하면
google-cloud-logging에 쓰이는 grpcio 를 정상 빌드 컴파일한 것을 볼 수 있습니다.
추가사항
Docker를 사용할 때 Python alpine을 사용하였는데, 3.6.9-alpine10 에서는 정상동작하지만,
3.8.1-alpine11로 진행하면 위 방법도 안먹힙니다.
'Trouble Shooting' 카테고리의 다른 글
DevTools failed to parse SourceMap (0) | 2020.03.20 |
---|---|
Django S3 ValueError : I/O operation on closed file (0) | 2020.02.27 |
Gitlab-ci 적용해본 썰 #2 - container registry 업로드 (0) | 2020.02.13 |
npm ERR! code 128 (0) | 2020.02.12 |
Gitlab-ci 적용해본 썰 #1. Container Registry 구성하기 (0) | 2020.01.24 |