파이썬 패키지 TA-Lib 설치 오류 원인 및 해결 방법(2개 운영체제: Linux, Windows)

기술적 분석을 위해서 우분투에서 TA-Lib를 사용하여 데이터 분석을 하려고, pip install TA-Lib로 설치하는데 패키지가 제대로 설치되지 않는 문제를 만날 수 있습니다. 그럼 TA-Lib 설치 방법을 확인하여 문제의 원인과 해결방법을 살펴보겠습니다.

TA-Lib란?

기술적 분석을 위한 라이브러리입니다. Quant 투자 하시는 분들께 도움이 될 라이브러리입니다. TA-Lib 홈페이지의 제품 페이지에서 Open-Source Python 영역을 보면 TA-Lib가 Perl이나 Python으로 구현되지 않았으며, C/C++로 구현되어 있음을 알 수 있습니다. 그리고 Python의 TA-Lib 패키지는 C/C++로 구현된 TA-Lib의 Wrapper 입니다.

TA-Lib 설치 방법(리눅스)

따라서 C/C++로 구현된 TA-Lib를 우선 설치하고, Python에서 TA-Lib 패키지를 설치해야 합니다. 만약 C/C++ 구현체인 TA-Lib를 설치하지 않고, Python의 TA-Lib 패키지만 먼저 설치하려고 하면 아래와 같은 오류(error: command ‘/usr/bin/gcc’ failed with exit code 1)를 만날 수 있습니다. 너무 겁낼 필요 없습니다. TA-Lib가 설치되어 있지 않아서 생기는 오류 메시지이니 TA-Lib를 설치해 주기만 하면 문제는 해결됩니다.

그림 1. Ubuntu에서 파이썬 패키지 ta-lib 설치 과정에서 발생한 오류
그림 1. Ubuntu에서 파이썬 패키지 ta-lib 설치 과정에서 발생한 오류

TA-Lib 소스코드 컴파일

ta-lib의 다운로드 페이지를 보면 있는 소스 파일은 C/C++임을 알 수 있습니다. 저는 Ubuntu에서 설치할 것이므로 소스 파일을 다운 받아서 설치할 것입니다. 참고로 gcc등 컴파일을 위한 빌드 도구가 없는 분들은 설치해서 사용하셔야 합니다.

tar zxvf http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure
make
sudo make install
ShellScript

위와 같이 압축을 풀고, 소스 코드를 직접 컴파일해 주고, 설치해줍니다. 그러면 마지막 install 과정에서 아래와 같은 메시지를 통해 설치경로를 확인할 수 있습니다.

Libraries have been installed in:
/usr/local/lib

TA-Lib 파이썬 패키지 설치

이제 TA-Lib의 Wrapper 패키지인 파이썬의 TA-Lib 패키지를 설치하겠습니다.

pip install ta-lib
ShellScript

TA-Lib 설치방법(Windows)

Windows에서도 마찬가지로 TA-Lib가 없으면 아래와 같은 오류를 토해냅니다.

그림 2. Windows에서 파이썬 패키지 TA-Lib 설치시 발생하는 오류
그림 2. Windows에서 파이썬 패키지 TA-Lib 설치시 발생하는 오류

ta-lib 홈페이지에서 윈도우용 소스 코드를 받아서 Visual Studio를 통해서 빌드를 해 주셔야 하는데, 어바인 캘리포니아 주립대학에서 컴파일을 모두 마친 python 패키지가 있습니다. 이것을 받아서 설치하는 편이 가장 속이 편하겠습니다. 그래서 VS를 통한 빌드과정에 대한 설명은 생략하겠습니다.

TA-Lib 컴파일된 패키지 설치(윈도우)

어바인 캘리포니아 주립대학에서 파이썬 버전별로 32/64bit 별로 컴파일 해 둔 웹 페이지가 있습니다. 웹 페이지에 들어가시면, 아래와 같은 목록이 있습니다. cp 뒤에 38, 39, 310 같은 부분이 파이썬 버전입니다. 각각 3.8, 3.9, 3.10입니다. 32bit용이 필요한 분은 win32가 적힌 것을, 64bit용이 필요한 분은 win_amd64를 받으시면 됩니다.

그림 3. Win32와 64용으로 파이썬 버전 별로 빌드된 TA-Lib 목록
그림 3. Win32와 64용으로 파이썬 버전 별로 빌드된 TA-Lib 목록

이제 다운 받은 파일을 설치해 주시면 됩니다. 저는 32bit 기반의 Python 3.10을 윈도우에서 사용하므로 아래와 같은 파일을 다운 받아서 설치해 줍니다.

pip install TA_Lib-0.4.24-cp310-cp310-win32.whl
ShellScript

설치 완료

파이썬 패키지 TA-Lib를 오류 없이 설치하셨나요? 이제 Python에서 import talib를 이용하여 TA-Lib를 자유자재로 활용하시면 됩니다.

같이 읽으면 좋은 글

크레온 플러스 API 연동 IsConnect 확인 후 강제종료

크레온 플러스 API 연동시 IsConnect를 통해 연결상태를 확인하고 나면 잠시 후 실행한 파이썬 어플리케이션이 종료되는 현상이 있습니다. 크레온 플러스 API 연동시 강제종료되는 현상의 원인과 해결 방법을 알아보도록 하겠습니다.

크레온 플러스 API IsConnect 확인 후 강제종료되는 현상

VULTR 가상머신에서 크레온 플러스 API를 연동해서 사용하기 위해서 호스팅을 신청하고 이용했습니다. 그런데 분명 과거에는 아무 문제 없이 잘 실행했었는데, 지금은 실행한 파이썬 어플리케이션이 죽어버립니다. 그것도 아무런 오류도 발생시키지 않고 그냥 종료됩니다. 크레온 홈페이지에서 검색을 하고 문의를 해도 명확한 해답을 알 수 없었습니다.

집에 있는 PC에서는 vultr 인스턴스와 동일한 python 버전과 동일한 버전의 pywin32 라이브러리를 사용했는데, 집에 있는 PC에서는 문제 없이 크레온 플러스 API 연동이 잘 되고 있었습니다.

크레온 플러스 API Q&A 게시판 검색을 통해 관련 문제 확인

Creon Plus API Q&A 게시판에서 관련 게시물들을 검색하다가, “Re : 비주얼 스튜디오 닫힘 현상“이라는 게시물을 확인했습니다. 디버깅 하는 경우에는 “메모리 보안 프로그램 사용”을 끄고 사용해야 한다는 이야기가 있었습니다.

그래서 문제가 발생했던 VULTR 인스턴스에서 “메모리 보안 프로그램 사용”의 체크를 해제하고 크레온 플러스를 실행하니, 정상 작동이 됐습니다. 그러면 보안 프로그램 끄고 쓰면 되겠다고 생각할 수 있겠지만, 보안 프로그램을 끄는 것이 최선의 해결책은 아니라고 생각했습니다.

그리고 제가 사용하는 다른 피씨에서는 보안 프로그램을 끄지 않고도 잘 작동하고 있었습니다. 보안 프로그램을 쓸 수 있는 PC와 쓸 수 없는 PC에는 어떤 차이가 있어서 그런 것일까 의문을 갖게 되었습니다.

문제 지점 확인을 위한 코드 제작

제가 작성한 파이썬 코드에서 IsConnect 값을 확인하는 과정에서 문제가 생기는 것을 확인했지만, 더 정확하게 문제가 발생하는 부분만을 확인하기 위해서 아래의 코드를 작성했습니다. 그리고 VULTR 인스턴스에서 구동했습니다.

import win32com.client
import time

print("START")
cp_cybos = win32com.client.Dispatch('CpUtil.CpCybos')
print("LOADED")
a = time.time()
is_connected = cp_cybos.IsConnect
b = time.time()
d = b - a
print("%.8f" % d)
for i in range(10):
  print(i)
  time.sleep(1)
print("END")
Python

실행한 결과는 아래와 같았습니다. for loop의 2번째 루프까지 돌고 그냥 종료되어 버렸습니다. 그래서 나머지 2~9까지의 값과 END가 출력되는 것을 볼 수 없었습니다. 너무도 당황스러웠습니다. 상식적인 코드의 동작이 아니었으니까요.

START
LOADED
5.55898523
0
1

흥미로운 것은 IsConnect 값을 얻어오는 과정에서 문제가 생기지 않는 머신에서는 1초 미만의 시간만 걸리는 한 편, 문제가 생기는 머신에서는 5초 이상의 시간이 걸리다가 파이썬으로 실행한 어플리케이션이 강제로 종료됐습니다.

아무리 봐도 명백하게 cp_cybos.IsConnect 값을 가져오고난 후 임의의 시간 후에 종료됐습니다. 원인은 IsConnect값을 가져오는 부분이겠다고 생각하게 되었습니다.

문제가 발생했던 머신은 Vultr 가상 머신으로 1 CPU, 2G RAM, python 3.9.6, pywin32 302 버전이었습니다.

그림 1. 크레온 플러스 API 연동 중 문제가 생긴 가상머신 사양
그림 1. 크레온 플러스 API 연동 중 문제가 생긴 가상머신 사양

동일한 문제가 다른 가상머신에서 발생하는지 확인

VULTR 인스턴스 새로 생성해서 테스트

1차적으로는 OS 버전이 달랐기 때문에, 혹시나 하는 마음으로 집에서 사용하는 PC의 운영체제와 같은 버전의 윈도우를 Vultr의 동일 사양의 인스턴스에 설치해보았습니다. 하지만 결과는 같았습니다. 동일한 문제가 생기고 있었죠. OS 버전의 차이가 영향을 주는 게 아니라는 것을 확인했습니다.

Gnome Boxes VM을 통해 테스트

Gnome Boxes를 이용해서 문제 상황이 재현되는지 확인했습니다. 만약 똑같이 재현이 된다면 단순히 VULTR 서비스의 문제라고 할 수 없다는 걸 확인하게 되니까요.

제가 사용하는 Ubuntu 20.04에 Gnome Boxes를 설치했습니다. Gnome Boxes에서 가상머신을 위한 운영체제로 Windows 10을 설치했습니다. 그리고, 파이썬과 크레온 API를 설치한 후, VULTR의 인스턴스에서 실행했던 동일한 위의 테스트 코드를 실행해 보았습니다.

동일한 문제가 발생하지 않았습니다. 문제가 없이 잘 실행됐습니다.

VUTLR 인스턴스 CPU 2개짜리로 테스트

그렇게 AhnLAB의 AOS가 무슨 문제를 일으키는 것일까 고민하고 있었는데, 해당 코드가 문제 없이 작동한 컴퓨터들은 모두 CPU를 2개 이상 사용하고 있다는 것이 떠올랐습니다.

그렇다면 Vultr 서비스에 어떤 문제가 있어서 그런 것 아닐까 싶었습니다. 그런데 지난 번에 사용했던 $20 짜리 인스턴스는 문제가 생기지 않았었는데, 왜일까 싶은 생각이 들었다. 현재 테스트한 Vultr의 인스턴스는 CPU 1개짜리, 잘 되던 인스턴스는 CPU 2개짜리 였습니다. 잽싸게 떠놓은 Snapshot으로 CPU 2개짜리 인스턴스를 만들어서 테스트 해 봤고, 잘 작동하는 것을 확인했습니다.

그림 2. 크레온 플러스 API 연동을 위해 테스트해서 문제가 생기지 않은 머신
그림 2. 크레온 플러스 API 연동을 위해 테스트해서 문제가 생기지 않은 머신

그렇다면 Gnome Boxes에서 CPU 개수를 1개로 바꾸면 문제가 재현될 수도 있겠다는 생각으로 테스트에 들어갔습니다.

Gnome Boxes의 VM CPU 개수를 1개로 변경해서 테스트

Gnome Boxes에서 CPU를 1개로 변경하고, 재부팅 한 후 동일한 코드를 실행했습니다.

그림 3. gnome boxes 가상 머신에서 CPU 개수 1개로 변경
그림 3. gnome boxes 가상 머신에서 CPU 개수 1개로 변경

VULTR 인스턴스에서와 동일한 문제가 재현됐습니다. 확인 차 다시 CPU를 2개로 변경하자, 아무 문제를 일으키지 않고 코드가 정상 작동했습니다.

결론

결론을 정리해 보겠습니다.

문제의 원인: AOS

Creon Plus에서 사용하는 AhnLAB의 AOS는 CPU 개수가 1개인 머신에서 크레온 플러스의 IsConnect 값을 얻어오는 과정에서 문제를 일으킵니다.

가상머신이나 클라우드 서비스와 Creon Plus API를 실행하는 것 간에 IsConnect 값 얻는데 문제가 생기는 상관관계가 있는 게 아닙니다.

해결 방법: CPU 개수

CREON PLUS API를 이용하는 머신은 실제머신이든 가상머신이든 간에 반드시 CPU 2개 이상이어야 AOS 작동에 문제가 생기지 않습니다.

관련 자료

크레온 플러스 Q&A 동일 현상에 대한 질문에 대해 크레온 측에서 답변해 준 내용입니다. Re : 비주얼 스튜디오 닫힘 현상을 참고한 것이 힌트를 얻는 데 도움이 됐습니다.

같이 읽으면 좋은 글

나스닥 지수와 코스닥 지수의 상관관계

2015년 12월 16일부터 2021년 1월 14일까지의 데이터를 가지고 분석하였다. 샘플 사이즈를 키운다고해서 딱히 상관관계가 더 있을 것으로 보이지 않아서 추가 분석은 생략하였다.

트레이딩 관련 도서에서는 나스닥과 코스닥의 상관이 없다고 이야기한다. 그 와중에도 전일 나스닥 상승률이 코스닥 상승률과 상관이 있다고 생각하는 친구들이 있어서, 사실인지 확인해보고 싶었다.

전일 나스닥이 상승하면 코스닥도 상승할까? Pearson 상관계수는 0.23이었다. 즉, 통계적으로는 상관이 없는 것으로 나왔다.

따라서, 크게 의미를 두지 않고 시스템을 개발하는 것이 좋다. 물론 이따금씩 구체적인 글로벌 시장 상황에 따른 영향을 받아서 함께 움직일 수도 있지만, 그렇다고 해서 매일 나스닥 지수가 모두 코스닥 지수에 영향을 준다고 일반화의 오류에 빠지는 것이다.

쨌든 나스닥 지수는 코스닥 지수에 대한 예측력이 없다.

끝!