본문 바로가기
업무자동화/파이썬-아래아한글 자동화 기초

"파이썬(아래한글) 실행중 오류를 해결할 수 없어 문의드립니다."

by 회사원코딩 2021. 7. 21.
안녕하세요! 자동화 관련 영상을 많이 보고 배웠습니다 정말 감사합니다! 제가 코딩을 여러곳에서 사용하느라 여러 컴퓨터에 파이썬을 깔았는데, 그 중 한 컴퓨터만 실행하려고 하면 오류가 납니다... 한글도 지웠다가 다시 깔고 파이참도 지웠다가 다시 깔았는데도 계속 같은 오류가 발생합니다. 도움 좀 부탁드리겠습니다.

import win32com.client as win32
import pandas as pd

#여기까지는 문제 없습니다.

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\gencache.py", line 524, in EnsureDispatch
    disp = win32com.client.Dispatch(prog_id)
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\__init__.py", line 96, in Dispatch
    return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, clsctx=clsctx)
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\__init__.py", line 37, in __WrapDispatch
    klass = gencache.GetClassForCLSID(resultCLSID)
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\gencache.py", line 180, in GetClassForCLSID
    mod = GetModuleForCLSID(clsid)
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\gencache.py", line 223, in GetModuleForCLSID
    mod = GetModuleForTypelib(typelibCLSID, lcid, major, minor)
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\gencache.py", line 263, in GetModuleForTypelib
    AddModuleToCache(typelibCLSID, lcid, major, minor)
  File "C:\Users\nhptp\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\gencache.py", line 559, in AddModuleToCache
    SetTypelibForAllClsids(mod.CLSIDToClassMap)
AttributeError: module 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0' has no attribute 'CLSIDToClassMap'

이렇게 뜨는데 해결방법을 도저히 모르겠습니다... 도움 주시면 감사드리겠습니다!

파이썬이랑 파이참 지웠다 다시 깔고, 한/글 제거하고 다시 깔고, 포맷까지 해보고 나서 연락 주지 마세요ㅜ

그냥 바로 문의 주세요ㅜㅜㅜ

가장 많이 문의 주시는 부분이고, 사실 저한테도 (이상하게) 자주 발생하는 오류입니다. 원인은 가상환경이나, 파이참 설정과 관련이 있을 수도 있는데, 근본적으로 이런 어트리뷰트 에러가 발생하는 이유는, win32com모듈로 오브젝트(한/글)를 생성할 때 두 가지 바인딩 방법(late-binding & early-binding)으로 생성되는 일종의 캐시파일 사이에 대소문자 차이가 발생하기 때문으로 추정됩니다. (사실 저도 잘 모릅니다ㅜ)

 

그리고 다행히 비슷한 오류가 엑셀이나 워드 등 MS오피스 프로그램을 자동화할 때도 종종 발생하고 있어, 해결방법이 인터넷에 많이 공유되고 있습니다. gencache.EnsureDispatch는 내부적으로 해당 오브젝트의 모든 메서드와 프로퍼티를 미리 탐색해서 py파일로 바인딩합니다. (이 경우 오브젝트모델로부터 타입 정보 전부를 미리 py파일로 생성하는 과정을 Early-Binding이라고 부르더라고요.)

 

그 중 제가 사용하는 방법은 경우에 따라 다른데, 

이번 기회에 제가 아는 방법 전부 다 설명드리겠습니다.

다 쓰고 보니 세 가지 밖에 아니네요;;

개인적으로는 세 번째 방법(Pythonwin.exe)을 가장 선호하고, 또 추천합니다.

 

1. gen_py 폴더에서 관련 캐시파일 삭제

일반적인 경우 c:\users\사용자이름\AppData\Local\Temp\gen_py 폴더 안에 가보면 파이썬 버전으로 폴더가 하나 생성되어 있고(예: 3.9), 그 하위에 win32com 관련 바인딩된 py파일이나 폴더들이 있습니다.

제 PC의 gen_py 폴더 내부

엑셀이나 다른 COM오브젝트를 사용하신다면 남겨두셔도 괜찮고, 내부의 파일과 폴더를 다 지우셔도 사실 무방합니다. gencache.EnsureDispatch 실행시 자동생성되니까요. 지우고 나서 (파이참 사용중이시면 파이참도 재시작하시고) 디스패치해보면 정상적으로 실행될 것입니다.

 

2. win32.gencache.EnsureDispatch()를 win32.dynamic.Dispatch()로 변경

(좋은 해결방법은 아닙니다.) 아예 late-binding으로 오브젝트를 생성해버리는 방식입니다.

한/글 실행시 오류는 발생하지 않지만, 메서드별 디폴트 파라미터값이 잡히지 않기 때문에

API매뉴얼을 참고해서 메서드의 모든 인자에 값을 지정해주지 않으면 특정 메서드 실행시 오류가 발생합니다.(귀찮;;;)

 

3. pythonwin.exe를 통해 MakePy 실행(가장 추천하는 방법)

해당 파이썬 버전이나 가상환경에 pywin32 모듈을 설치하셨으면, 파이썬 설치폴더 하위에 pythonwin.exe 파일이 생성되어 있습니다. (대부분의 경우 파이썬설치폴더\Lib\site-packages\pythonwin\Pythonwin.exe)

가상환경이 많으면 Pythonwin도 많아집니다. 잘 찾아서 실행합시다.

찾아서 실행해봅시다.

Pythonwin.exe 실행화면
Tools의 COM Makepy utility 실행
HwpObject 1.0 Type Library (1.0) 찾아서 실행

위 타입라이브러리를 찾아서 실행하면 아래와 같은 메시지가 뜹니다.

Building definitions from type library...

작업이 완료되었습니다. Pythonwin을 닫아주고, 파이참 유저는 파이참을 재시작합니다.

다시 gencache.EnsureDispatch를 실행하면 오류가 발생하지 않습니다.

위 작업을 아래 움짤로 만들어보았습니다.

Pythonwin.exe 를 통한 MakePy 실행 과정

 

개인적으로는 pythonwin.exe를 실행하는 세 번째 방법을 추천드립니다.

이 과정에서 생성된 7d2b6f3c~~.py 파일을 파이참 프로젝트 내에 복사해 두시거나,

한 번은 직접 열어보시는 것도 추천드립니다.

그 이유는 자동화 작업에 익숙해지고 여러 번 문제를 만나다 보면 차츰 아시게 될 겁니다.

(제 포스팅과 유튜브 영상 중에도 두어 번 이 주제를 다룬 적이 있었던 것 같네요.)

 

그럼 이번 포스팅은 여기서 마칩니다.

행복한 하루 되세요^^

아래 관련영상을 첨부해두었으니 필요하신 경우 참고하시기 바랍니다. 2019년 영상이네요..

 

답변이 도움이 되었다면 아래 버튼으로 커피를 후원해주세요. 감사합니다.

donaricano-btn
728x90
반응형

댓글5

  • hyun 2021.11.27 09:28

    안녕하세요.
    유튜브 보면서 따라하다가 한글실행이 안되어서 이 블로그 보는데
    pythonwin에서 HwpObject 1.0 Type Library (1.0) 없으면 따로 추가하는 방법이 있을까요?
    답글

    • 회사원코딩 2021.11.27 09:32 신고

      안녕하세요? 혹시 한글버전을 어떤 걸로 설치하셨는지요? 종종 한글이 깔려 있어도 타입라이브러리가 보이지 않는 케이스가 있었는데, 대부분은 한글 재설치나 다른 버전 설치로 해결했습니다ㅜ

    • hyun 2021.11.28 07:08

      감사합니다.
      한글2018에서 잘됩니다.
      한글 2022은 안되네요 ㅜ.ㅜ

    • 회사원코딩 2021.11.28 09:58 신고

      무튼 다행이예요ㅎㅎㅎ 근데 이상하긴 하네요ㅜ 저는 현재 한글 2020으로 작업중이거든요ㅜㅜ 2018과 2020은 큰 차이가 있는 것 같진 않지만, 왠지 손해보시는 것 같은 느낌이어서ㅜ 저도 도무지 원인을 모르겠습니다ㅠㅜ

    • 회사원코딩 2021.11.28 10:03 신고

      아, 제가 2022를 잘못 읽었나보네요ㅠ 저도 아직 2022를 써보진 않았는데 조만간 한 번 테스트해보겠습니다.