본문 바로가기
아래아한글 자동화/python+hwp 중급

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

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년 영상이네요..

 

 


국내 유일의 파이썬+한컴오피스 업무자동화 입문강의

 

움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 인프런 | 강의

파이썬으로 아래아한글을 다루는 짧은 예제코드들을 소개하고, 중간중간의 결과를 GIF로 보여드립니다. 동영상 강의가 아니지만 오히려 빠르게 배울 수 있고, 따라하기도 쉽습니다., - 강의 소개

www.inflearn.com

 

댓글