INVESTAR / StockAnalysisInPython

456 stars 413 forks source link

8.2.4 크레온 데이터 조회 관련 질문입니다. #96

Closed jin1-seo closed 2 years ago

jin1-seo commented 3 years ago

8.2.3의 크레온 시스템 접속 체크의 경우, 64비트 파이썬이 기본환경이기 떄문에 C:\Users\sjw10\AppData\Local\Programs\Python\Python38\lib\site-packages\pywinauto\application.py:1085: UserWarning: 32-bit application should be automated using 32-bit Python (you use 64-bit Python) warnings.warn( 32비트 파이썬을 자동으로 실행하여 크레온 플러스에 접속이 가능합니다. 하지만 8.2.4의 경우 같은 환경에서 실행해보면

C:\myPackage>C:/Users/sjw10/AppData/Local/Programs/Python/Python38/python.exe c:/myPackage/EtfAlgoTrader.py Traceback (most recent call last): File "C:\Users\sjw10\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 81, in _GetGoodDispatch IDispatch = pythoncom.connect(IDispatch) pywintypes.com_error: (-2147221021, '작업을 사용할 수 없습니다.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "c:/myPackage/EtfAlgoTrader.py", line 4, in cpStatus = win32com.client.Dispatch('CpUtil.CpCybos') File "C:\Users\sjw10\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client__init__.py", line 95, in Dispatch dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) File "C:\Users\sjw10\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName return (_GetGoodDispatch(IDispatch, clsctx), userName) File "C:\Users\sjw10\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 83, in _GetGoodDispatch IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) pywintypes.com_error: (-2147221164, '클래스가 등록되지 않았습니다.', None, None) 이라는 오류가 뜹니다. 라이브러리 dynamic.py에 들어가서 살펴봤지만 도저히 어떤 오류인지 잘 모르겠어서 질문드립니다!

(+) 예상되는 오류 원인은 아무래도 64비트 파이썬 환경에서 실행한 것이 원인인 것 같은데, 이 예상을 바탕으로 vs code에서 32비트 파이썬 3.8.9로 인터프리터를 바꾸어서 실행하고자 하면 pywin32가 없는 모듈이라고 뜹니다. pip으로 32비트 파이썬에 추가적으로 어떻게 라이브러리를 설치하는 지 잘 모르겠기도 합니다..ㅠㅠ

jin1-seo commented 3 years ago

image

VirtualENV를 activate해서 pip으로 라이브러리들을 설치하고, 그냥 그 경로에 있는 라이브러리들을 Appdata상의 파이썬이 있는 경로로 들어가 복사해서 실행하면 위 사진처럼 실행이 되긴 합니다. 그런데 이러면 가상환경을 구축해서 실행하는게 아닌게 아닌가요..? 아직 파이썬 초보라 헷갈립니다 ㅜㅜ

INVESTAR commented 3 years ago

크레온 플러스 COM API를 설치한 상태인데도 '클래스가 등록되어 있지 않다'고 에러 메시지가 표시되는 이유는 크레온 COM 모듈(CpUtil.CpCybos)을 찾지 못해서일 가능성이 큽니다.

File "c:/myPackage/EtfAlgoTrader.py", line 4, in
cpStatus = win32com.client.Dispatch('CpUtil.CpCybos')

pywintypes.com_error: (-2147221164, '클래스가 등록되지 않았습니다.', None, None)

말씀하신대로 가상 환경(venv)에 설치된 32비트 파이썬을 activate 한 상태에서 pip install pywinauto로 설치해도 되고 64비트 OS에 가상 환경을 구축하지 않고 32비트 파이썬을 설치한 후 pip 명령으로 pywinauto나 pywin32를 바로 설치해도 되지만, 어찌됐든 크레온 플러스 COM API가 32비트로 개발되어 있기 때문에 이를 호출해서 사용하는 파이썬이나 IDLE도 32비트여야 한다는 제약 사항이 있습니다.

또한, 운영체제 내부의 COM 모듈에 접근하는 파이썬이나 IDLE은 관리자 권한으로 실행해야 크레온 플러스 COM API를 정상적으로 사용할 수 있습니다.