인프런 커뮤니티 질문&답변

ssaycao님의 프로필 이미지
ssaycao

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

exe파일로 추출하려고 했는데 오류가 떠요

해결된 질문

작성

·

591

1

선생님 또 질문하러 왔습니다 ㅠㅠ

pyinstaller로 exe파일 추출하는걸 따라하고 있었는데요...

 

openpycl이 import 되지 않았다고 떠서 import 문도 따로 넣었거든요.

그랬더니 이제는 openpyxl.cell_writer 모듈이 없다고 뜨는데

여기부터는 어떻게 해결해야하는지 잘 모르겠네요.

구글 검색했더니 해결방법이 되게 여러가지가 뜨던데

그중에 저에게 맞는 해결법은 없었습니다..:(

혹시 선생님께서도 이런 오류를 겪으신 적이 있을까요?

답변 2

1

ssaycao님의 프로필 이미지
ssaycao
질문자

선생님 그리고.. exe로 추출을 했는데요...

제 컴퓨터에선 아주 잘 돌아가거든요?!

근데 다른 사람 컴퓨터에선 오류가 뜨는데 해결책을 모르겠습니다 ㅠㅠ

혹시 이것도 도와주실 수 있을까요...ㅠㅠㅠㅠ

image

이게 처음에 뜬 오류인데, 아무래도 pyhwpx 열부터 문제가 생기는 것 같아서

--hidden-import pyhwpx를 추가했는데

image

그래도 이런 오류가 뜨고 제대로 실행이 안되네요.

뭘 제가 더 줘야하는 걸까요..?ㅠㅠ

일코님의 프로필 이미지
일코
지식공유자

보안모듈 때문에 발생한 오류입니다.

(이걸 예외처리를 하고 싶은데ㅜ 내부망에서는 까다롭네요ㅜㅜㅜ)

 

  1. pyinstaller를 실행하실 때

FilePathCheckerModule.dll 파일을 소스코드와 같은 폴더에 복사해 두시고,

pyinstaller -F main.py --add-binary="FilePathCheckerModule.dll:."

이런 식으로 컴파일하시면 됩니다. (파일명이 정확해야 합니다ㅜ)

 

  1. 컴파일할 때 --add-binary 파라미터를 넣지 않았어도

FilePathCheckerModule.dll 파일을 실행파일과 같은 곳에 두시기만 하면

정상 작동합니다.

 

  1. 인터넷이 연결되어 있는 경우면 1, 2번 방식을 사용하지 않아도 오류가 발생하지 않습니다..

 

참고해주시기 바랍니다^^

 

이 부분은 조만간 패치를 하겠습니다.

행복한 하루 되세요!

(인프런 댓글알림을 받고 싶은데, 좋은 방법이 없을까요?;;)

ssaycao님의 프로필 이미지
ssaycao
질문자

ㅠㅠㅠㅠㅠ선생님,, --add-binary를 넣어도 안되고 실행파일에 저 dll파일을 함께 둬도 안되고 인터넷도 연결되어 있는데 대체 뭐가 문제일까요... ㅠㅠㅠㅠㅠ

1

일코님의 프로필 이미지
일코
지식공유자

흠, 지금 오류 재현이 안 돼서 정확히 해결이 되는지는 모르겠지만,

--hidden-import 옵션을 추가해보세요.

예를 들면 아래처럼요.

> pyinstaller -F 수주보고자료.py --hidden-import openpyxl.cell._writer

사이에 점(.) 빼먹지 마시고요^^

한 번 해보시고

다른 오류 발생하면 알려주세요ㅎㅎ

ssaycao님의 프로필 이미지
ssaycao
질문자

감사합니다 선생님! 정말 바로 성공했어요!

그런데 엑셀에 있는 데이터를 가져올 때, 빈 셀은 한글에 nan으로 가져와지는데 이거 빈칸으로 가져올 수는 없는 건가요??

일코님의 프로필 이미지
일코
지식공유자

nan이 "문자열"로 인식돼서 그래요ㅜ

엑셀이나 파이썬 단에서 빈 문자열("")로 교체하신 후에

한/글에 삽입하셔야 할 것 같아요.

지금은 어떤 방식으로 삽입하고 계세요??

hwp.put_field_text를 사용중이신가요?

 

ssaycao님의 프로필 이미지
ssaycao
질문자

넵 put_field_text 사용중입니다.

엑셀 표시형식이 텍스트로 되어있어서 생기는 문제라는 의미실까요??

일코님의 프로필 이미지
일코
지식공유자

아뇨. hwp.put_field_text 라인을 어떤 방식으로 작성하셨는지 여쭌 것입니다.

예를 들어, 데이터프레임을 삽입하는

hwp.put_field_text(df) 방식이라면

df.칼럼 = df.칼럼.str.replace("nan", "") 같은 라인을 실행하신 후에

다시

hwp.put_field_text(df) 라고 실행하시면

한/글 표에 "nan"이 빈 문자열로 바뀌는 식입니다.

 

만약 판다스를 쓰지 않고

openpyxl 등에서 특정 범위를 for i in sheet.rows:... 같은 방식으로

튜플이나 리스트로 가져온 후에 삽입하시는 거라면,

삽입하고자 하는 리스트나 튜플을 순회하면서

"nan"이 있는 경우 ""로 바꿔주시면 되고요.

 

약간 번거롭지만 그런 (경미한) 전처리가 필요합니다^^

ssaycao님의 프로필 이미지
ssaycao
질문자

와.. replace 쓰는 법 찾는데 3시간이 걸렸어요.. 선생님이 자동화를 독학하셨다는 게 진짜 대단하시다는 생각이 듭니다 ㅠㅠ

하지만 덕분에 NaN도 해결하고 엑셀에서의 줄바꿈을 한글에서의 줄바꿈으로 대체하는 방법까지 한번에 해결했습니다! 정말 감사합니다 ㅠㅠ

엑셀에서의 줄바꿈이 \n, 한글에서의 줄바꿈이 \r\n이라는 것까지 찾았는데, 혹시 한글에서의 강제 줄바꿈(shift+enter)는 어떤 걸로 대체해야 하는지도 알 수 있을까요..?

일코님의 프로필 이미지
일코
지식공유자

한/글의 강제 줄바꿈(Shift-Enter, LineBreak)은

표준 탈출문자열이나 아스키문자열에 속하지 않기 때문에

MS워드를 제외한 다른 프로그램에서 활용하기는 어렵습니다.

"\n", \r\n" 처럼 탈출문자열로 표현할 수도 없는 것 같습니다.

그래도, 방법이 있는지 알아보겠습니다.

(알아내게 되면, 꼭 알려드리겠습니다^^)

 

ssaycao님의 프로필 이미지
ssaycao
질문자

악 그런가요? ㅠㅠㅠㅠ 안타깝네요 감사합니다!

일코님의 프로필 이미지
일코
지식공유자

강제줄바꿈은 한/글의 찾기/찾아바꾸기 기능 안에서만 제한적으로

^l이라는 문자열로 접근하실 수 있습니다.

만약 한/글 문서에서 강제줄바꿈 때문에 문제가 발생해서

(엑셀로 붙여넣을 때 줄바꿈이 유지가 되지 않는다든지)

전부 일반 줄바꿈으로 변환 후 엑셀로 내보내기 하실 때는

hwp.find_replace_all("^l", "^n")

을 한 번 실행하시고 엑셀로 내보내기 하시면 됩니다.

참고로, 아래아한글 문단끝(줄바꿈)은 "\r\n" 대신 "\r"로 표기하셔도 무방해 보입니다^^;

ssaycao님의 프로필 이미지
ssaycao
질문자

엑셀에서 한 줄바꿈이

한글로 들어갈때 유지가 안되어서

그걸 변환하고자 한건데, 그냥 줄바꿈이 아니라 강제 줄바꿈으로 바꾸고 싶었거든요!

그런데 \l로 하면 그냥 문자로 인식하는지 \l로 들어가서 안될것 같네요..

친절하게 찾아주셔서 감사합니다!

ssaycao님의 프로필 이미지
ssaycao

작성한 질문수

질문하기