올해에 Python을 주 기술스택으로 사용하는 회사에 들어갔다보니, Java세계에서 경험하기 어려운 일을 경험하게 됩니다.

이번에 Python 3.10에서 hiredis wheel 빌드 오류를 발견하였습니다.

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -I/usr/include/openssl11 -I/usr/include/openssl11 -fPIC -Ivendor -I/home/dhsung/.pyenv/versions/3.10.5/envs/tmp-hiredis-build/include -I/home/dhsung/.pyenv/versions/3.10.5/include/python3.10 -c src/hiredis.c -o build/temp.linux-x86_64-cpython-310/src/hiredis.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -I/usr/include/openssl11 -I/usr/include/openssl11 -fPIC -Ivendor -I/home/dhsung/.pyenv/versions/3.10.5/envs/tmp-hiredis-build/include -I/home/dhsung/.pyenv/versions/3.10.5/include/python3.10 -c src/reader.c -o build/temp.linux-x86_64-cpython-310/src/reader.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -I/usr/include/openssl11 -I/usr/include/openssl11 -fPIC -Ivendor -I/home/dhsung/.pyenv/versions/3.10.5/envs/tmp-hiredis-build/include -I/home/dhsung/.pyenv/versions/3.10.5/include/python3.10 -c vendor/hiredis/alloc.c -o build/temp.linux-x86_64-cpython-310/vendor/hiredis/alloc.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -I/usr/include/openssl11 -I/usr/include/openssl11 -fPIC -Ivendor -I/home/dhsung/.pyenv/versions/3.10.5/envs/tmp-hiredis-build/include -I/home/dhsung/.pyenv/versions/3.10.5/include/python3.10 -c vendor/hiredis/read.c -o build/temp.linux-x86_64-cpython-310/vendor/hiredis/read.o
vendor/hiredis/read.c: In function ‘redisReaderFree’:
vendor/hiredis/read.c:646:9: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int i = 0; i < r->tasks; i++) {
^
vendor/hiredis/read.c:646:9: note: use option -std=c99 or -std=gnu99 to compile your code
error: command ‘/usr/bin/gcc’ failed with exit code 1
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for hiredis

이 오류는 CentOS7에서 python3.10 버전으로 빌드할때 나오는것으로, 다른 배포판(CentOS 8 Stream, Rocky Linux 8, Ubuntu 20.04, 22.04 LTS)에서는 정상적으로 빌드가 됨을 확인하였습니다.

에러로그를 보고 cpython 3.10용 hiredis wheel이 없나 검색을 하였습니다.

 

New release for cp3.10 is not on pypi · Issue #121 · redis/hiredis-py

Time for a new release? Btw, travis-ci.org is dead, maybe time to move to github action and cibuildwheel?

github.com

 

그러나, cpython3.10용 hiredis wheel이 없어서 CentOS7에서 직접 wheel 빌드 어떻게 하나 고민을 했습니다.

에러를 보면 `error: ‘for’ loop initial declarations are only allowed in C99 mode` 메시지가 나옴을 확인하였습니다.

이 에러를 해결을 어떻게 할까 stackoverflow로 검색을 하니 다음의 링크를 발견하였습니다

 

How to use make and compile as C99?

I'm trying to compile a linux kernel module using a Makefile: obj-m += main.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname...

stackoverflow.com

 

즉, CentOS7에서 python 3.10용 hiredis 2.0.0 wheel 생성을 하려면 환경변수에 `CFLAGS=-std=c99` 를 추가해야합니다.

환경변수에 `CFLAGS=-std=c99` 를 추가한 결과, cpython3.10용 hiredis wheel 빌드 및 생성 성공하였습니다.

 
 
 
Buy me a coffeeBuy me a coffee

Python의 우리말 번역(飜譯, Translation)은 파이선? 파이썬? 파이쏜? 정확한 우리말 번역어(飜譯語)는 뭘까요?

대한민국 특허청의 특허정보 검색 서비스 사이트인 키프리스에서는 PYCON이라는 상표를 파이콘으로 번역을 하였고, 상표출원자인 Python Software Foundation파이쏜 소프트웨어 파운데이션으로 번역하였습니다.

즉, 특허청에서는 Python파이쏜으로 번역하여 사용하고 있습니다.

Python Software Foundation(1076192), 파이쏜 소프트웨어 파운데이션(520190825203)

그러나, EBS에서 내놓은 수학과 함께하는 AI 기초에서는 Python파이선으로 번역하였습니다.

‘문제 해결하기’로 문제 해결에 필요한 데이터 수집부터 시각화까지 파이선 프로그래밍으로 처리하는 과정을 쉽게 이해할 수 있도록 Step by Step으로 구성하였습니다.

그러나, 파이콘 한국(PyCon Korea)에서는 Python파이썬으로 표기하더군요.

파이콘 한국은 한국의 파이썬 개발자들이 지식을 공유하고 만남을 갖기 위한 장입니다.

그러면, Python의 공식 우리말 번역은 무엇일까요? 파이쏜? 파이선? 파이썬?

어렵네요. Python이 한국에 소개된 지 약 20~30년이 되어가다 보니 아직까지 번역어에 대하여 혼동이 많이 있는 것 같습니다.

프로그래밍 언어 Python을 개발자들이 주로 파이썬으로 말하다보니 사실상 표준(De Facto Standard)으로 파이썬이 표준 번역어로 되어간다만요. 기존 법률상에서는 파이쏜, 공공기관에서는 된소리 표기를 회피하는 것 때문에 파이선으로 사용하다보니 검색을 할 때 상당히 혼란이 올 것으로 봅니다.

Buy me a coffeeBuy me a coffee
Buy me a coffeeBuy me a coffee

+ Recent posts