Pyinstaller

jacade·2021년 6월 1일
0

pyinstaller 사용시 --hidden-import에 패키지 이름을 써도 적용이 안되는 경우

pyinstaller에 대한 개념과 기본적 사용법은 구글링을 통해 조사하고 https://developer-mistive.tistory.com/59 포스트도 한번 보시길

hook 파일 생성하기

PYTHON_DIR\Lib\site-packages\PyInstaller\hooks 폴더안에 'hook-packageName.py' 파일을 생성하고 아래와 같이 작성한다.

from PyInstaller.utils.hooks import collect_all
datas, binaries, hiddenimports = collect_all('packageName')

이후 pyinstaller 명령을 이용하여 exe 파일을 생성한다

pyinstaller --hidden-import packageName tool.py

PySide6 추가하기

pyinstaller 를 사용시 PySide6가 내장이 안된다. 현재 PySide2에 대한 설정만 되어 있는 상태이다. 추후 업데이트가 되면 해결되리라 생각되지만 우리는 그때까지 기다릴수 없다. PySide6에 대한 hook 파일을 만들어 해결할수 있지만 생각보다 작업양이 만만치 않으며 내가 만든 패키지도 아닌데 하고싶지 않다.
해결법은 pyinstaller 에 --add-data 옵션을 이용하면 된다. 아니면 .spec 파일에 data 항목을 추가하면 된다.

pyinstaller --onefile --add-data PYTHON_DIR\Lib\site-packages\PySide6;PySide6

참고 : https://github.com/pyinstaller/pyinstaller/issues/5414

그래도 안되면 PySide6 폴더를 자신의 작업폴더에 복사하고 .spec 파일에 datas 항목에 PySide6를 추가한다.
이러면 되긴된다. 단점은 용량이 많이 커진다. 많이....

2021-07-23 기준 이제 위에거 안해도 된다 pyinstaller가 업데이트 되면서 pyside6 hook이 추가 되었다

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


block_cipher = None


a = Analysis(['main.py'],
             pathex=['TOOL_DIR'],
             binaries=[],
             datas=[('./*', './'),('./PySide6', './PySide6')],
             hiddenimports=['PySide6'],
             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='TOOL_NAME',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True,
	icon='./icon.ico' )

0개의 댓글