: 국내에서 주식 Data를 Stream 형식으로 실시간 받아보기 위해서는 증권사에서 제공하는 API를 이용하는게 일반적이다. Open API를 제공하는 증권회사는 키움, 대신, 하나는 기억이.. 아무튼 이렇게 3개로 알고 있다. 각 증권회사의 API마다 requst per seconds 라든지, API Client를 실행하는 방식이 조금씩 다르기 때문에 장단점이 있지만, 사실 국내 증권사의 Open API는 해외 증권사와 다르게 큰 차이가 없는 것 같다. 

 

아무튼, Open API를 이용할 때, 누구나 한 번 쯤은 겪을 만한 일들을 간단히 정리하고, 해결하는 방법을 적어보고자 한다. 

 

1. Open API 지원 환경

: 현재 기준(20.10.28)으로 키움 증권, 대신 증권 모두, Python 환경에서 Open API를 이용하기 위해서는 Python 32bit 버전이 설치되어 있어야 한다. 이 후, 대신 증권 같은 경우에는 win32com Library도 32bit 버전이 필요하고, 키움 증권도 PyQT 버전이라든지 추가적으로 Library에 대한 버전도 맞춰야 한다. 하지만, 이러한 Library는 쉽게 지우고 설치할 수 있지만, Python 버전을 지웠다 설치했다가 하기에는 무척 번거롭다.

 

보통 Python을 자주 사용하는 사람들은 현재 3.7 또는 3.8 버전에 64bit를 이용하고 있기 때문에, 위와 같은 경우에는 분명히 32bit 환경이 따로 필요한 상황일 것이다. 

 

하지만, 걱정할 필요 없다. Python Conda에서 제공해주는 가상환경 생성 method를 이용하면 내가 원하는 독립된 새로운 Python 환경을 생성 및 삭제할 수 있기 때문이다. 당연하겠지만, 가상 환경이라고 해도 Memory Resource는 기존 Base Python과 마찬가지로 필요하기 때문에, 동시에 실행할 경우에는 Compute Resource의 여유 자원이 있어야 한다.

 

1) 먼저 Conda로 설치할 수 있는 Python Version들을 확인해본다. 

conda search python

Anaconda를 설치했으면, Anaconda Prompt를 실행하여, conda search python을 입력하면, 현재 설치 가능한 python 버전 목록들이 나온다. 현재 기준으로는 py3.7이 가장 최적화되어 있는 버전이기 때문에, py3.7 버전을 선택해서 생성해보도록 할 예정이다.

conda search python

 

 

2) 가상환경 Python 버전 설치

set CONDA_FORCE_32BIT=1
conda create -n py37_32 python=3.7.9 anaconda

우리가 필요한 버전은 python 32bit 버전이다. 만약, set CONDA_FORCE_32BIT=1로 Setting을 하지 않는다면, Default로 설정되어있는 64bit 버전이 설치될 것이다. 그런 일이 발생하지 않도록 꼭 설치하기 전에 Setting을 하도록 하자.

 

다음, conda create -n <가상환경 이름> python=<version> anaconda 명령어를 실행하여, 원하는 python version을 설치하도록 한다. 여기서, 명령어 맨 마지막에 있는 anaconda가 의미하는 것은, 가상환경이 설치될 때, 함께 설치할 기본 Library를 의미한다. anaconda라고 입력할 경우에는 anaconda에서 제공하는 기본 Library들이 함께 설치된다. 만약, 가상환경에서 모든 Library가 아니라, numpy와 pandas만 필요하다고 할 경우에는 conda create -n <가상환경 이름> python=<version> numpy pandas 이런 방식으로 필요한 Library만 입력해서 설치할 수도 있다.

 

이 후, 설치가 정상적으로 진행된다면 다음과 같은 메세지를 볼 수가 있다.

설치 이후 메세지

 

3) 가상환경 Python 변환

conda activate py37_32

위의 명령어를 시행하면, base(기존 환경)에서 우리가 방금 설치한 py37_32 환경으로 변경해준다. 그리고, 다음과 같이 변경된 사항을 확인해 볼 수 있다.

python 환경 변경

위와 같이 (base)와 (py37_32)으로 변환이 잘 되는 것을 확인했으면, 가상 환경 설치가 잘 되었다고 볼 수 있다. 그리고 만약 기존의 base 버전으로 돌아가고 싶다면 다음 명령어를 실행하면 된다.

conda deactivate

base 환경으로 변경

뭔가 길게 적어놔서 복잡해 보이지만, 무척 간단하게 가상환경을 설치하고 연동했다가 해제할 수도 있다.

 

 

4) 가상환경 Python과 Jupyter Lab 연동

 

이제 가상환경은 설치가 되었으니, 코딩 작업을 해야하는데 본인은 Jupyter Lab을 자주 이용하기 때문에 가상환경과 Jupyter Lab Kernel을 연동하는 과정을 소개하고자 한다.

 

먼저, 위에서 생성한 가상환경(py37_32)에 Jupyternotebook, jupyterlab, ipykernel library가 설치되어 있는지 확인해야한다. 만약, 위의 library가 설치되어 있지 않다면, pip install로 해당 환경(py37_32)에서 설치하고 진행해야 한다.

ipykernel, jupyter library

 

모든 준비가 끝났다면 다음 명령어를 실행한다.

python -m ipykernel install --user --name py37_32 --display-name "py37_32"

위의 명령어는 앞서 생성한 py37_32라는 가상환경을 Jupyter Lab에는 "py37_32"라는 이름으로 보여지도록 연동을 하겠다는 의미이다. 만약, 위와 같이 명령어를 실행하지 않으면 죽어다 깨나도 jupyter lab에서 py37_32라는 새로운 kenenl을 알 수 없다. 

 

그렇다면 잘 연결되었는지 확인해보자.

 

Jupyter Lab에서 가상 환경 커널이 연동 가능한 것을 보면 잘 연결된 것 처럼 보인다. 그러면 실제로 실행하면 잘 돌아갈까? 아마 정상적으로 실행이되는 사람들도 있겠지만, 새로운 환경의 Kernel로 연결될 때, Kernel이 죽었다는 Error Message를 보는 사람도 많을 것이다.

 

위와 같은 Error가 발생할 경우에는 다음과 같은 조치를 취한다.

pip uninstall pyzmq
pip install pyzmq

pyzmq library를 지웠다가 새로 설치한다. 처음에 본인도 반신반의했지만, 위와 같이 하니깐 잘 실행된다.. 실제로 삭제하고 새롭게 설치된 pyzmq 버전 모두 동일한 것으로 확인했는데, anaconda 설치 시, 자동으로 설치되는 pyzmq와 repository에서 직접 호출해서 설치하는 것과 뭔지는 모르겠지만, 다른 부분이 있나보다..

 

 

5) 가상환경 & Jupyter Lab 연동 해제 및 가상환경 삭제

 

가상환경의 목적이 달성되면, 자원 확보 차원에서도 삭제를 하는게 좋다. 삭제하는 방법도 무척 간단하다.

jupyter kernelspec list
jupyter kernelspec uninstall py37_32

위와 같이 list 명령어로 현재 jupyter lab에 연동된 kernel list를 확인하고, 불필요한 가상환경 연동을 해제할 수 있다. 그리고, 실제 물리적 가상환경을 제거하는 방법은 다음과 같다.

 

conda remove --name py37_32 --all

이로써, py37_32 가상환경은 목적을 달성하고, 삭제가 된다. 

 

 

아무튼! 결과적으로 Open API 연동을 위한 새로운 python 32bit 환경을 만들어 보았고, 필요한 사람들이 있을 것 같아 정리해보았다. 

 

 

+ Recent posts