올해에 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

CentOS 7에서 Python 3.10 이상 버전 사용하기 전 OpenSSL 1.1.1을 RPM으로 설치하는 방법

PEP644 문서에는 Python 3.10 이상부터 OpenSSL 1.1.1 이상을 요구하고 있습니다.

PEP 644 — Require OpenSSL 1.1.1 or newer 

https://peps.python.org/pep-0644/

 

PEP 644 – Require OpenSSL 1.1.1 or newer | peps.python.org

PEP 644 – Require OpenSSL 1.1.1 or newer PEP 644 Title Require OpenSSL 1.1.1 or newer Author Christian Heimes BDFL-Delegate n/a Discussions-To https://discuss.python.org/t/pep-644-require-openssl-1-1-or-newer/5584 Status Final Type Standards Track Create

peps.python.org

 

그러나, 여러 대기업, 관공서등에서 CentOS 7을 아직도 많이 사용을 하고 있고, CentOS 7은 OpenSSL 1.1.1이 아닌 OpenSSL 1.0.2가 설치되어있습니다.

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

CentOS 7에서 Python 3.10을 사용하고 싶은데, OpenSSL 1.1.1이 설치가 되지 않아 소스 컴파일하여 사용해야 하나 이런 고민을 많이 했습니다.

그러나, 일본의 파이썬 개발자가 공유한 글을 보고, CentOS 7에서 OpenSSL 1.1.1을 소스 컴파일이 아닌 RPM설치로도 가능하다는 걸 알게 되었습니다.

아래는 일본 파이썬 개발자가 작성한 글 “Python 3.10の新機能(その8) OpenSSL 1.1.1が必須に”[번역: Python 3.10의 신기능(8번째 부분) OpenSSL 1.1.1이 필수임] 입니다.

 

Python 3.10の新機能(その8) OpenSSL 1.1.1が必須に - python.jp

Pythonでは、https通信やメッセージダイジェストの作成などの暗号関連機能に、OpenSSLを利用しています。 これまで、Pythonでは OpenSSL のVersion 1.0.2以降が利用可能でしたが、Python 3.10からは、OpenSS

www.python.jp

여기에서는 CentOS 7에서 OpenSSL1.1.1을 설치하려면 Fedora Project에서 제공하는 EPEL(Extra Packages for Enterprise Linux) 저장소를 추가하여 설치하면 된다고 하더군요.

다음의 명령어로 CentOS 7에서 OpenSSL1.1.1을 설치할 수 있습니다.

yum install epel-release
yum install openssl11 openssl11-devel

OpenSSL1.1.1 설치가 끝나면 아래의 명령어로 확인 가능합니다

$ openssl11 version 
OpenSSL 1.1.1k  FIPS 25 Mar 2021

pyenv로 설치 시 아래와 같이 환경변수를 지정해야 CentOS 7에서 Python을 설치할 수 있습니다

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
pyenv install 3.10.4

만약, Python을 소스 빌드로 설치하려면 아래와 같이 명령어를 입력하면 됩니다.

yum install epel-release
yum install openssl11 openssl11-devel
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
./configure
make
sudo make install

여담으로, 3월 24일에 예정된 일정 이전에 Python 3.10.4 및 3.9.12 버전이 출시되었다고 글이 공개되었습니다.

Python 3.10.4 and 3.9.12 are now available out of schedule

https://blog.python.org/2022/03/python-3104-and-3912-are-now-available.html

 

Python Insider: Python 3.10.4 and 3.9.12 are now available out of schedule

Did anybody say cursed releases? Well, it turns out that 3.10.3 and 3.9.11 both shipped a regression which caused those versions not to build on Red Hat Enterprise Linux 6. While this 11-year-old version is now out of maintenance support, it’s still used

blog.python.org

글 내용을 보면, “Red Hat Enterprise Linux 6”에서 Python3.10.3 및 3.9.11 버전이 빌드가 되지 않는 문제 때문이라고 하더군요. RHEL(Red Hat Enterprise Linux) 6은 11년 전에 출시되었고, 이제는 유지보수 지원이 끝났습니다만, 많은 사무 업무분야에서 여전히 많이 사용되고 있다고 합니다. 게다가 자체 manylinux2010 이미지는 CentOS 6을 기반으로 합니다….

아직도 RHEL 6/Cent OS6기반으로 이미지를 사용하는 경우도 많군요

 

보안 이슈때문에 라이브러리를 새로 바꿔줘야 하는데 Legacy(낡은 것)를 뺄 수가 없으니, 버리는 것이 쉽지 않다는 걸, CentOS 7에서 Python 3.10(지금 기준 — 3.10.4)을 설치하며 알게 되었습니다.

ps.CentOS 7에서 pyenv 로 3.11-dev설치할때도, OpenSSL1.1.1에 대한 환경변수 설정 후에 설치를 해야 정상 설치 됩니다.

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
pyenv install 3.11-dev

참고: PEP(Python Enhancement Proposal)는 “파이썬 언어의 개선된 제안”으로 번역하며, 파이썬 커뮤니티에서 수많은 사람들이 의견을 내고 토론하고 발전하며 논의된 주제를 PEP(Python Enhancement Proposal)로 문서화를 하였습니다 

출처: https://wikidocs.net/21733

 

 

1) PEP

## PEP 파이썬 창시자 귀도를 중심으로 수많은 사람들이 기여해서 발전해온 언어입니다. 귀도라는 최종 결정권자 혹은 그리고 결정을 하는데 가장 큰 영향력을 끼치는 독재 ...

wikidocs.net

 

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

이번에 EBS에서 무료로 인공지능에 대한 강의 및 교재PDF파일을 공개하였습니다

www.ebssw.kr/info/intrcn/infoTchmtrHeaderView.do?tabType=006

 

이솦 | EBS 소프트웨어

이솦 | EBS 소프트웨어

www.ebssw.kr

이 '수학과 함께하는 AI기초' 강의와 교재는 고등학생과 일반 사람을 대상으로 하였습니다.

책을 보니 인공지능(人工知能, Artificial Intelligence; AI)에서 사용하는 수학 및 프로그래밍 기초를 다루고 있습니다.

예제 소스는 Python으로 제공하고 있고, 어려운 내용을 고등학교 수학 내용정도로 쉽게 설명하고 있습니다.

강의 영상을 조회해보니 다른 곳과 다르게 리눅스(Linux)에서도 원활하게 접근되며 영상을 볼 수 있습니다.

 

다만,  책(PDF)의 부록에서는 윈도우10(Windows10)기준으로 실습 환경 준비 설명하는것이 아쉽긴합니다. 여기에 대해서는 파이선(Python)이 멀티 플랫폼 지원을 하다보니 MacOS, Linux에서 모두 지원하다보니 누군가는 공유할것 같습니다.

 

저는 이번에 부족한 인공지능(人工知能, Artificial Intelligence; AI)에 대한 기초 지식 및 수학 내용에 대한 개념을 찾기 위해 한가위 기간 및 연말까지 해당 책과 강의영상을 시간 날때마다 들어볼 계획입니다.

 

참고

news.hada.io/topic?id=2864

 

수학과 함께하는 AI 기초 | GeekNews

- 고등학생 및 일반인을 대상으로 하는 EBS 소프트웨어 강의- AI를 개발 및 사용하는 데 필요한 수학 개념과 프로그램 지식을 전달- 예제코드는 파이선으로 작성됨- 무료 동영상 강좌 및 교재 파일

news.hada.io

 

Buy me a coffeeBuy me a coffee

이번에 한성컴퓨터에서 나온 TFG7475H(GK7NPFR)를 구입하였습니다.

이 랩탑은 중국의 칭화통팡(淸華同方, 한국한자음: 청화동방, 중국어음: 칭화통팡, 중국어(번체)표기: 清華同方, 중국어(간체)표기: 清华同方 중국어: Qīnghuá tóngfāng, 영어표기: Tsinghua Tongfang)의 베어본으로 만들어졌습니다.

아래는 칭화통팡에서 제조한 15인치 'GK5N--O' 및 17인치 'GK7N--R' 시리즈의 전세계 출시될때의 이름을 정리한 목록입니다.

www.reddit.com/r/AMDLaptops/comments/himoym/all_of_the_vendors_that_are_offering_the_tongfang/

 

All of the Vendors that are offering the Tongfang GK5N--O and the GK7N--R

Tongfang is a Chinese ODM (Original Design Manufacturer) that sells their laptop designs to vendors around the world, so far they have released 2...

www.reddit.com

저는 이 중 'GK7NPFR' 모델 기반의 한성컴퓨터의 TFG7475H를 구매하였습니다.

이 노트북에는 CPU로 8코어 16쓰레드의 AMD Ryzen Renoir 4800H를 사용하였고, GPU로는 Nvidia GTX 1650 Ti를 사용하여 CUDA연산을 할 수 있습니다.

이번에 재택근무 이슈가 있다보니, 노트북을 뭘로 살까 고민하다 CPU 성능이 우수하면서 GPU가 들어간 노트북을 사용해보게되었습니다! 원래는 이 모델보다 GPU상위 모델(Nvidia RTX 2060)이 달린 TFG7476H를 사용하려고 했으나, 이미 인기가 많아 매진되어 구매 수령을 하려면 9월말까지 기다려야 한다고 하였습니다. 그래서 급하게 필요한지라 얼른 구할 수 있는 TFG7475H(GTX 1650Ti)를 구입하였습니다.

TFG7475H에 오픈수세(openSUSE) 리눅스와 KDE Plasma를 설치 하였습니다. 시스템 정보를 보니 CPU: AMD Ryzen 7 4800H와 GPU: GTX 1650 Ti가 보임을 확인할 수 있습니다.

아래는 오픈수세(openSUSE) 리눅스 설치 화면입니다.

설치가 완료되었습니다.

처음에, 리눅스 설치를 해보니 노트북 LCD엔 출력이 제대로 동작하니, 정상적으로 설치했다 좋아했습니다.
그러나, HDMI로 24인치 모니터를 노트북에 연결해보니 외장모니터 연결은 안되는 문제가 있습니다.

이 한성 TFG7475H의 그래픽스관련으로 리눅스에서 설치를 해보니 노트북의 LCD 화면은 AMD Radeon 내장 그래픽에서 출력되고, 외장화면(HDMI, miniDP 연결)은 Nvidia GTX 1650 Ti에서 출력되더군요.

그래서, Nvidia 드라이버를 설치 후, openSUSE의 SUSE Prime 설치해야 노트북 내장 화면(LCD)및 외장화면 (HDMI, miniDP)동시 출력이 가능합니다.(Nvidia 모듈 설치후에 외장모니터만 화면 출력되고, 노트북 LCD가 안나오는 현상 겪으면 멘붕합니다 ㅋㅋㅋㅋㅋㅋㅋ ㅠㅠㅠㅠ )

en.opensuse.org/SDB:NVIDIA_drivers

en.opensuse.org/SDB:NVIDIA_SUSE_Prime

en.opensuse.org/SDB:AMDGPU

위의 3가지 내용을 참조하여, Nvidia, AMD 내장 그래픽 모두 나올 수 있게 삽질을 해야합니다.

(해당 내용은 우분투등 대부분의 배포판에서 에서도 동일한 현상이 일어날 것입니다.)

아래는, 오픈수세 리눅스에서 리브레오피스(LibreOffice) 소스코드를 빌드할때 화면입니다.

오픈수세(openSUSE)에서 리브레오피스(LibreOffice) 빌드중

이제, 리눅스가 잘 돌아가는 걸 확인하였으면, tensorslow-gpu를 사용할 수 있게 설정해야합니다.

엔비디아(Nvidia)사이트 들어가서 CUDA Toolkit 11.0 를 설치하면 됩니다

developer.nvidia.com/cuda-downloads

 

CUDA Toolkit 11.0 Update 1 Downloads

Select Target Platform Click on the green buttons that describe your target platform. Only supported platforms will be shown. By downloading and using the software, you agree to fully comply with the terms and conditions of the CUDA EULA. Operating System

developer.nvidia.com

 

저는 오픈수세(openSUSE)를 사용하기 때문에, CUDA Toolkit을 openSUSE기반으로 받아서 설치했습니다.

그리고, cuDNN은 아래 링크에서 rpm파일을 다운로드 받아서 설치

developer.download.nvidia.com/compute/machine-learning/repos/rhel8/x86_64/

 

Index of /compute/machine-learning/repos/rhel8/x86_64

 

developer.download.nvidia.com

libcudnn8-8.0.3.33-1.cuda11.0.x86_64.rpmlibcudnn8-devel-8.0.3.33-1.cuda11.0.x86_64.rpm, nvidia-machine-learning-repo-rhel8-1.0.0-1.x86_64.rpm를 다운로드 받아서 설치하였습니다.

$ sudo zypper in libcudnn8-8.0.3.33-1.cuda11.0.x86_64.rpm libcudnn8-devel-8.0.3.33-1.cuda11.0.x86_64.rpm nvidia-machine-learning-repo-rhel8-1.0.0-1.x86_64.rpm 

이후 pip으로 tensorflow-gpu를 설치해봅니다.

$ pip3 install tensorflow tensorflow-gpu

라이브러리 설치가 되었으면, 두근두근

tensorflow에서 Nvidia GPU연동이 잘 되는지 테스트를 해봅니다

$ python3 -c 'import tensorflow as tf; print(tf.__version__)'
2020-09-12 03:28:30.666780: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory
2020-09-12 03:28:30.666814: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2.3.0

아, Python의 tensorflow-gpu는 CUDA 10.1 버전을 사용하고 있더군요. CUDA 동적 라이브러리 10.1 버전이 없어서 에러가 났습니다.

해당 내용 검색을 하니, CUDA 10.1버전을 설치하라고 나옵니다

Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory #38578

 

Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or

Debian 10.3 Python 3.8.2 Cuda 10.2 Quadro K5200d drivers 440.82 Tensorflow 2.2.0-rc2 import tensorflow as tf tf.config.list_physical_devices('GPU') 2020-04-15 20:58:07.177217: I tensorflow/...

github.com

추가적으로, 저는 openSUSE Linux에서 CUDA 10.1 버전을 추가 설치하였습니다

$ sudo zypper install cuda-10-1

설치가 완료되면 다시, tensorflow-gpu라이브러리가 정상 작동할수 있게 Nvidia CUDA가 제대로 설치되었는지 확인해봅니다

$ python3 -c 'import tensorflow as tf; print(tf.__version__)'
2020-09-12 03:38:39.770262: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2.3.0

드디어, Nvidia CUDA 및 tensorflow 설치, tensorflow-gpu 라이브러리가 정상 작동함을 확인하였습니다.

한성컴퓨터에서 출시된 TFG7475H에서 리눅스 설치하였고 딥러닝, tensorflow, CUDA연산 할수 있게 설정을 하니 가성비가 엄청 좋음을 느꼈습니다.

참고 링크:

intellegibilisverum.tistory.com/entry/%ED%95%9C%EC%84%B1-%EB%85%B8%ED%8A%B8%EB%B6%81%EC%97%90%EC%84%9C-ubuntu-1606-LTS-tensorflowgpu-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0

 

한성 노트북에서 ubuntu 16.06 LTS + tensorflow-gpu 세팅하기

2년전에 한성노트북을 구입했다. 그때 Intel graphic과 nvidia gtx 950m 가 같이 되어 세팅되어 있던 노트북이었는데 그동안 nvidia는 거의 안사용했던거 같다. 그래서 이번에 그것도 사용할 겸 tensorflow-gpu

intellegibilisverum.tistory.com

bcho.tistory.com/1311

 

개발자 코딩 노트북 구입기 (DELL Inspiron 7580) 우분투

개발자용 노트북 구입기 조대협 (http://bcho.tistory.com) 집에서 개발 공부와, 테스트를 위해서 개인 노트북이 필요했는데, 아무래도 업무와 개인 공부를 분리하는것이 좋을것 같아서, 얼마전 부터 ��

bcho.tistory.com

 

흠 위의 링크에서 한성컴퓨터에 리눅스 설치하면 삽질 엄청해야한다고 하는데, openSUSE 사용하면 그나마 우분투보다 삽질 품이 줄어들듯 합니다.

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

이번에 Python을 이용하여 LibreOffice의 Unittest 소스코드에 공헌을 해보았습니다.

출처:

관련 링크:

링크의 Cppunit 소스코드에 보면 입력된 값에 대해서 이 값이 기대된 값(Expected value)인지 검사하는 로직이 있습니다.

이 단위테스트에서 주석과 결과를 넣어야할텐데, 문자열의 유니코드 코드포인트값을 어떻게 빠르게 뽑아낼까 고민을 하다 역시 Python이 있었지 하면서 Python으로 결과값을 뽑아내서 cppunittest 소스코드를 수정 작성하였습니다.

        // DBNum1 -> NatNum4: Korean lower case characters
        // 一億二千三百四十五万六千七百八十九
        sExpected = u"\u4e00\u5104\u4e8c\u5343\u4e09\u767e\u56db\u5341\u4e94\u4e07\u516d\u5343\u4e03\u767e\u516b\u5341\u4e5d ";
        sCode = "[NatNum4][$-0412]General\\ ";
        checkPreviewString(aFormatter, sCode, 123456789, eLang, sExpected);
        sCode = "[DBNum1][$-0412]General\\ ";
        checkPreviewString(aFormatter, sCode, 123456789, eLang, sExpected);

아래는, 주석에 적은 문자열를 Python을 이용하여 Unicode Codepoint로 변환하는 예제입니다.

Python 3.8.3 (default, May 27 2020, 20:54:22) 
[Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "一億二千三百四十五万六千七百八十九".encode("unicode_escape")
b'\\u4e00\\u5104\\u4e8c\\u5343\\u4e09\\u767e\\u56db\\u5341\\u4e94\\u4e07\\u516d\\u5343\\u4e03\\u767e\\u516b\\u5341\\u4e5d'
>>> "壹億貳阡參佰四拾伍萬六阡七佰八拾九".encode("unicode_escape")
b'\\u58f9\\u5104\\u8cb3\\u9621\\u53c3\\u4f70\\u56db\\u62fe\\u4f0d\\u842c\\u516d\\u9621\\u4e03\\u4f70\\u516b\\u62fe\\u4e5d'
>>> "1억2천3백4십5만6천7백8십9".encode("unicode_escape")
b'\\uff11\\uc5b5\\uff12\\ucc9c\\uff13\\ubc31\\uff14\\uc2ed\\uff15\\ub9cc\\uff16\\ucc9c\\uff17\\ubc31\\uff18\\uc2ed\\uff19'
>>> "일억이천삼백사십오만육천칠백팔십구".encode("unicode_escape")
b'\\uc77c\\uc5b5\\uc774\\ucc9c\\uc0bc\\ubc31\\uc0ac\\uc2ed\\uc624\\ub9cc\\uc721\\ucc9c\\uce60\\ubc31\\ud314\\uc2ed\\uad6c'
>>> 

Python의 결과값을 이용하여 Cppunittest의 결과값 비교를 하는데 유용하여 사용했습니다.

Python이 아니였으면 일본사람인 小笠原徳彦(Naruhiko Ogasawara)님과 협업으로 리브레오피스 소스코드 수정하는데 많이 지연이 되었을 것 같아요.

 

ps. 파이썬(Python)같이 생산성 빠른 언어를 익혀두면 언젠간 쓸 일이 생긴다.

ps2. 참고할만한 글

https://towardsdatascience.com/a-guide-to-unicode-utf-8-and-strings-in-python-757a232db95c

A Guide to Unicode, UTF-8 and Strings in Python

Strings are one of the most common data types in Python. This guide will help you master Unicode, UTF-8 and strings in general.

towardsdatascience.com

 

Buy me a coffeeBuy me a coffee

The Guts of Unicode in Python 

- PyCon 2013 talk by Benjamin Peterson


Summary

This talk will examine how Python's internal Unicode representation has changed from its introduction through the latest major changes in Python 3.3. I'll present properties of the current Unicode implementation like algorithmic complexity and standard compliance. The talk will also compare Unicode in Python with some other languages. Finally, I'll look into the future of Python's Unicode.


Buy me a coffeeBuy me a coffee

Python의 CJK(Chinese-Japanese-Korean,동아시아문자처리) 라이브러리 정리


1. Cjklib 0.3.2 

Homepage: http://cjklib.org/0.3/

Python Package Index: https://pypi.python.org/pypi/cjklib/0.3.2


2. cjktools 1.6.0

Homepage: https://pypi.python.org/pypi/cjktools

Github: https://github.com/larsyencken/cjktools/


위의 2개의 CJK라이브러리를 조사해본 결과, Python2기반으로 작성되었으나, Python3로 변환되지 않았음.

cjklib의 경우는 중국어 중에서 만다린(보통화, 북경어), 상하이어, 광동어(홍콩어), 일본어, 한국어에 대한 지원이 있음을 확인했으나, 라이브러리 사용이 어렵게 느껴짐을 확인.


cjktools의 경우는 중국어와 일본어만 다루기 때문에 CJK(Chinese-Japanese-Korean)의 Korean이 없다는 것을 확인.


위의 라이브러리가 Python3로 변환되지 않은 것을 보고, 이번에 Python3를 공부할겸, Python3의 문자열 처리 및 Unicode Consortium의 unihan database 내용을 확인해보겠습니다.


CJK(Chinese-Japanese-Korean)의 개발에 대한 내용은 Adobe에서 활동하는 Ken Lunde의 책 "CJKV Information Processing"을 참조하여, 사용하기 편한 Python3 라이브러리를 만들어볼 계획입니다.

 

아래는 Python CJK라이브러리 조사전에 CJK에 관심을 가지게 된 트윗글



“Genuine Han Unification is not outside the realm of extreme possibilities.”— Fox William Mulder, FBI Special Agent

슬라이드의 마지막장에 있는 의미심장한 문구




Buy me a coffeeBuy me a coffee
突然の死




살아남아라! 개복치 게임 의 "돌연사"

_人人 人人_ 

> 돌연사 < 
 ̄Y^Y^Y^Y ̄ 

를 패러디한 Python 라이브러리



Buy me a coffeeBuy me a coffee

+ Recent posts