Python : pyenv-windows 와 Jupyterlab 환경

pyenv-windows 와 Jupyterlab 환경

pyenv-windows 설치

파워셀에서 설치 스크립트를 실행해서 설치하는 과정으로 정리되어 있다.

준비

  1. 테스트
    • Windows 10 Home 21H1 / 19043.928
    • Microsoft Visual C++ 2015-2019 Redistribution
    • pip version 22.1 혹은 22.0 상태
  2. 주의
    Windows 최신 (Windows 11 등)

    pip 22.3 이상인 경우 Microsoft Visual C++ Build Tools 를 설치해야 한다.

    이어지는 Microsoft C++ Build Tools 설치 참조해 설치한다.

PowerShell 스크립트 실행 모드 확인

외부 스크립을 실행할 수 있기 위해서는 ExecutionPolicy가 unrestricted 상태여야 한다.

PowerShell을 관리자 모드로 실행해

다음과 같이 입력

1
2
> ExecutionPolicy      <-- 현재 상태 확인
Restricted <-- 모든 스크립트 막은 상태

모드 변경을 위해 다음 명령 실행

1
> Set-ExecutionPolicy Unrestricted

모드 변경 확인

1
2
> ExecutionPolicy      <-- 현재 상태 확인
Unrestricted <-- 모든 스크립트 허용 상태.

모드가 Unrestricted 상태에서 pyenv-win 을 설치한다.


pyenv-win 설치

pyenv-win 설치 항목에서 파워쉘을 통해 스크립트 실행을 통해 설치한다. 모든 방법들은 윈도우 홈 디렉토리의 .pyenv/ 폴더 아래에 실행 스크립을 위치한다.

인스톨러

다음 파워쉘 스크립트를 파워쉘에서 실행한다.

1
2
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

만약 Unauthorized Script 에러가 나면 PowerShell 스크립트 실행 모드 확인 같이 Unrestricted 모드로 설정해야 한다.

실행하면 %USERPROFILE%/.pyenv 아래에 관련 파일을 다운로드 한다.

설치 완료후 파워쉘에서 pyenv 명령을 실행하면 아래 같이 도움말 화면이 나오면 성공이다.

Microsoft C++ Build Tools 설치

pip versions 22.3 이상 업그레이드 혹은 설치를 하면 Redistribution 패키지 설치로는 해결이 안된다.

  • pip v22.1 까지는 Microsoft Visual C++ 2015-2019 Redistribution 로도 충분하다.

다음 사이트에서 build tools 을 다운로드 받아 설치한다.

설치시 아래 옵션을 선택해 설치한다.

Python 배포본 설치

이제 pyenv 를 사용해서 Python 3.10, Python 3.9 버전을 설치해 보자.

설치 가능한 버전은 pyenv install -l 명령으로 확인 가능하다. 아래 같이 파워셀에서 필요한 버전을 필터링해 확인해 보자.

1
2
3
4
5
6
7
8
PS > pyenv install -l | findstr 3.9
.
.
3.9.11
3.9.12-win32
3.9.12
3.9.13-win32
3.9.13

원하는 버전의 버전 번호를 입력해 설치한다.

윈도우 버전의 배포본이 pyenv 의 가상환경 폴더 밑에 설치 된다.

이어서 바로 Python 3.9 버전도 설치해 보자.

윈도우 버전 배포본 설치가 진행된다.

pyenv 에서 설치한 Python 3.10, Python 3.9 를 설치 확인을 해보자

Jupyter-Lab 설치

3.9 버전을 글로벌로 지정했다.

1
PS C:\Users\andro> pyenv global 3.9.12

pyenv 가능한 버전 확인

1
2
3
PS C:\Users\andro> pyenv versions
3.10.4
*3.9.12

현재 파워쉘의 파이썬 버전을 3.10 으로 지정했다.

1
2
3
PS C:\Users\andro> pyenv shell 3.10.4
PS C:\Users\andro> python -V
Python 3.10.4

venv 모듈로 가상환경을 생성하고 활성화 한다.

1
2
3
PS C:\Users\andro> python -m venv .venv/jupyter_p310
PS C:\Users\andro>.\.venv\jupyter_p310\Scripts\activate
(jupyter_p310) PS C:\Users\andro>

jupyter-lab 설치

1
2
(jupyter_p310) PS C:\Users\andro> pip install jupyterlab
Collecting jupyterlab

Jupyter-lab에서 사용할 notebook 공간 생성

1
(jupyter_p310) PS C:\Users\andro> mkdir jupyter-work

jupyter-lab 실행

1
2
3
4
5
6
7
8
9
10
11
(jupyter_p310) PS C:\Users\andro> jupyter-lab --no-browser .\jupyter-work\
...
[I 2022-05-24 03:27:03.847 ServerApp] Serving notebooks from local directory: C:\Users\andro\jupyter-work
[I 2022-05-24 03:27:03.847 ServerApp] Jupyter Server 1.17.0 is running at:
...
To access the server, open this file in a browser:
file:///C:/Users/andro/AppData/Roaming/jupyter/runtime/jpserver-4664-open.html
Or copy and paste one of these URLs:
http://localhost:8888/lab?token=866bdd9bed841f4dafc5c431a7ffcd4b01f516e4583f38d7
or http://127.0.0.1:8888/lab?token=866bdd9bed841f4dafc5c431a7ffcd4b01f516e4583f38d7
[W 2022-05-24 03:28:04.189 LabApp] Could not determine jupyterlab build status without nodejs

[HTS API] 대신증권 CybosPlus Python API 준비

국내 증권사들 중에서 주식거래 HTS 를 통해서 API 를 지원하고 있다. 여기서는 대신증권 CybosPlus 를 사용해보려고 한다.

  1. 대신증권 CybosPlus 설치
  2. 32bit Miniconda환경
  3. JupyterLab 시작
  4. Powershell Openssh 설치
    • 원격으로 접속시

증권 HTS API 와 Jupyter Lab 환경

HTS에서 제공하는 OpenAPI 를 사용해서 주식 정보 및 주문을 처리할 수 있다. 여기서는 Jupyter lab 으로 윈도우 머신에 설치된 Open API 를 지원하는 HTS 사용하는 과정을 정리했다.

증권사별 API 비교

“” 키움 증권 대신 증권 이베스트 증권
제공방식 OCX COM COM, DLL
파이썬 보통 좋음 보통
API사용성 보통 좋음 좋음
API거래 수수료 0.015% (HTS수준) 0.015% (HTS수준)
월정액 15000+0.0088%
0.015% (HTS수준)

사전 준비

  • 대부분 윈도우용 COM API 를 지원하는 HTS 는 32bit 기반의 Python 환경.
  • 32bit Miniconda2 를 설치해서 사용하겠다.

대신증권 CybosPlus 설치

대신증권의 API 서비스인 CybosPlus 를 사용한다.

  1. Cybos 5 설치
  2. Python2.7 32bit 환경인 Miniconda 32bit 버전 설치

Cybos 5 설치

설치를 하고 CybosPlus 로 인증서를 통해서 로그인한다.

HTS 가동과 연결

HTP 프로그램은 보통 자동으로 관리자 모드로 실행된다. 이 API를 사용하는 파이썬 프로그램도 역시 관리자 모드로 실행되야 한다.

32bit Miniconda2 환경

윈도우 머신에 Python2.7 기반 32bit 용 Miniconda 를 설치한다. 그리고 필요에 따라 64bit miniconda 를 설치한다. 설치하게 되면 32비트 버전은 Miniconda2, 64비트 버전은 miniconda3 으로 구분할수 있다.

대신증권 가상환경

관리자 권한으로 HTS 를 실행하기 때문에 Python을 통한 API 호출도 관리자 권한이 필요하다. 관리자 권한으로 miniconda 를 실행하고 대신증권 가상환경을 생성한다.

메뉴에서 miniconda 쉘을 실행하면 아래같이 나타난다.

1
2
3
(base) C:\Windows\system32>
(base) C:\Windows\system32>d:
(base) D:\> conda create -n daeshin_hts jupyter

대신증권 API를 사용하기 위해서 가상환경을 설정한다. 테스트/응용을 위해서 jupyter 환경을 구성한다.

1
2
3
4
5
6
7
8
9
10
11
(base) D:\>conda env list
# conda environments:
#
base * C:\Users\daddy\miniconda2
daeshin_hts C:\Users\daddy\miniconda2\envs\daeshin_hts
C:\Users\daddy\miniconda3
C:\Users\daddy\miniconda3\envs\deeplearning
C:\Users\daddy\miniconda3\envs\ml
C:\Users\daddy\miniconda3\envs\tf2
C:\Users\daddy\miniconda3\envs\tf25
C:\Users\daddy\miniconda3\envs\tf26

JupyterLab 시작

필요한 패키지를 설치하고 jupyterlab 을 실행한다. 먼저 가상환경을 활성화 한다.

1
(base) > conda activate daeshin_hts

패키지 설치

가상환경을 활성화 하고 jupyterlab numpy scipy matplotlib 패키지를 설치한다.

1
(daeshin_hts) > conda install jupyterlab numpy scipy matplotlib

콘다 가상환경이 생성된 후에 가상환경을 활성화 한다.

  • Jupyter Lab을 시작한다.
1
(daeshin_hts) > jupyter lab WORK_FOLDER

JupyterLab Config

원격 접속등을 위해서 비밀번호를 사용한다. 그러기 위해서 구성 파일을 통해서 비밀번호, 포트 번호등을 설정해야 한다.

generate-config

Jupyter Lab 에서 설정 파일을 생성한다. 다음 명령으로 각각 $HOME/.jupyter/ 위치에 jupyter_notebook_config.py 파일이 생성된다.

1
(daeshin_hts)> jupyter lab --generate-config

jupyter_notebook_config.py 설정 파일에 비밀번호를 추가하려면 비밀번호를 생성하는데 jupyter 명령과 python 명령에서 생성하는 2가지 방법이 있다.

1) jupyter 명령으로 패스워드 생성

첫번째로 아래는 쥬피터 폴더에 있는 파일 ‘jupyter_notebook_config.json’에 패스워드를 생성해 준다.

1
2
3
(daeshin_hts)$ jupyter notebook password                                        Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to $HOME\.jupyter\jupyter_notebook_config.json

위 명령으로 jupyter_notebook_config.json에 암호가 생성되면 “”sha1:723c…” 로 시작하는 패스워드 해시코드를 복사한 후 jupyter_notebook_config.py 파일의 c.NotebookApp.password 항목에 입력을 한다.

2) python 명령으로 비밀번호 생성

비밀번호 설정 다른 방법으로 파이썬에서 passwd 모듈을 실행해서 비밀번호를 얻을 수 있습니다.

1
2
3
4
5
6
7
(daeshin_hts)$ python
>> from notebook.auth import passwd
>> passwd()
>> Enter password:
>> Verify password:

'sha1:********'

출력되는 sha1 암호문자열을 복사해서 사용하시면 됩니다.

1
2
3
4
5
[jupyter_notebook_config.py]

c.NotebookApp.password = 'sha1:*********' # 외부 접속시 사용할 비밀번호
c.NotebookApp.ip = '*' # 어디서든 접속 가능
c.NotebookApp.port = 8888 # 접속에 사용할 포트

Powershell Openssh 설치

윈도우에 원격 접속해서 HTS를 위한 파이썬 가상환경에서 jupyterlab을 실행할 필요가 있다. 이때 윈도우 파워쉘에서 openssh 설치하고 연결한 후에 administrator 계정으로 관리자 모드로 jupyhter 를 실행한다.

윈도우즈 administrator 활성화

대신 hts 에 접속하기 위해서는 관리자 권한이 필요하다. ssh로 윈도우즈 계정 로그인은 되지만 hts 활설화를 위해서

  1. administrator 게정을 활성화 한다.

  2. 파웨쉘을 관리자로 실행해 다음 같이 실행한다.

1
(daeshin_hts)> net user administrator /active:yes
  1. jupyter-lab을 runas 명령으로 실행한다.
1
2
3
(daeshin_hts)> runas /env /user:administrator "jupyter-lab.exe .\Jupyter-HTS\"
administrator의 암호 입력:
jupyter-lab.exe .\Jupyter-HTS"을(를) 사용자 "DESKTOP-GOYANGI\administrator"(으)로 시작하려고 합니다.

참고

  1. openssh 서버 구성: https://docs.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_server_configuration
  2. https://docs.microsoft.com/ko-kr/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7.1
  3. 윈도우즈 서비스 만들기: https://docs.microsoft.com/ko-kr/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer