Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/Errors] ModuleNotFoundError: No module named 'pkg_resources.py2_warn' 본문

Programming/Errors

[Programming/Errors] ModuleNotFoundError: No module named 'pkg_resources.py2_warn'

scii 2020. 7. 8. 19:57

pyinstaller를 이용해 exe파일 생성 후 실행시키니 ModuleNotFoundError: No module named 'pkg_resources.py2_warn' 라는 오류가 발생했다. 

구글링 결과 hiddenimports 메뉴 부분에 추가하면 된다고 한다. 그래서 아래처럼 추가하여 해결하였다.

만약 OpenCV를 사용하였는데 "cv2" 임포트 에러가 발생하면, 아래와 같이 binaries에 dll을 추가해준다.

a = Analysis(['main.py'],
             pathex=['D:\\workspace\\python\\test',
                'D:\\workspace\\python\\test\\widgets\\preference',
                'D:\\workspace\\python\\test\\widgets\\screenshot'
             ],
             binaries=[('C:\\Anaconda3\\envs\\auto_gui\\lib\\site-packages\\cv2\\opencv_videoio_ffmpeg430_64.dll', '.')],
             datas=[],
             hiddenimports=['MySQLdb', 'pkg_resources.py2_warn'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True , icon='main.ico')

위와 같이 spec파일을 수정하고 아래의 명령처럼 실행하면 된다.

// 주의할 점은 main.exe가 아닌 main.spec 이라는 점이다.

pyinstaller.exe --icon=main.ico --onefile --noconsole .\main.spec

 

앱 처음 시작 시 너무 느린 현상.

간단한 앱도 onefile 옵션으로 만든 exe파일을 실행하면 너무 느리다... 이유를 찾아보니 하나의 파일로 만들어지면서 필요하지도 않은 모듈들이 포함되어 너무 무거워진 탓이다.

아래의 onedir 옵션의 spec파일과 명령이다.

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['main.py'],
             pathex=['D:\\workspace\\python\\kakaoMultipleMsg'
                'D:\\workspace\\python\\kakaoMultipleMsg\\widgets\\preference',
                'D:\\workspace\\python\\kakaoMultipleMsg\\widgets\\screenshot'
             ],
             binaries=[('C:\\Anaconda3\\envs\\auto_gui\\lib\\site-packages\\cv2\\opencv_videoio_ffmpeg430_64.dll', '.')],
             datas=[],
             hiddenimports=['MySQLdb', 'pkg_resources.py2_warn'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False , icon='main.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='main')
// 주의할 점은 main.exe가 아닌 main.spec 이라는 점이다.

pyinstaller.exe --icon=main.ico --onedir --noconsole .\main.spec
Comments