Pyinstaller 패키지 의 고급 용법 을 정리 합 니 다.

1.pyinstaller 설치PyInstaller프로그램 을 독립 적 으로 실행 가능 한 파일 로 포장 하 는 제3자 패키지 입 니 다.
제3자 가방 이기 때문에 설치 해 야 합 니 다.

pip install pyinstaller
또는 최신 버 전 으로 업그레이드:

pip install --upgrade pyinstaller
개발 자 버 전 설치:

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
물론 파일Python을 다운로드 하고whl설치 할 수도 있 습 니 다.
홈 페이지 안내 참조:
http://www.pyinstaller.org/downloads.html
2.포장 초기 체험
python 코드 를 exe 로 실행 가능 한 파일 로 포장 해 보 겠 습 니 다.테스트 코드 는 다음 과 같 습 니 다.

#   .py
import os

path = os.getcwd()
print(f'      :{path}')
os.system('pause')
이 코드 는 파일 이 있 는 디 렉 터 리 를 인쇄 하 는 것 입 니 다.저 희 는pip install간단 한 포장 명령 으로 다음 과 같 습 니 다.

pyinstaller -F   .py
이 명령 은 다음 과 같이 실 행 됩 니 다.

(env_test) F:\PythonCool\pyinstaller>pyinstaller -F   .py    
403 INFO: PyInstaller: 4.3
403 INFO: Python: 3.8.10 (conda)
434 INFO: Platform: Windows-10-10.0.19042-SP0
436 INFO: wrote F:\PythonCool\pyinstaller\  .spec
455 INFO: UPX is not available.
468 INFO: Extending PYTHONPATH with paths
['F:\\PythonCool\\pyinstaller', 'F:\\PythonCool\\pyinstaller']
501 INFO: checking Analysis
...
...
15006 INFO: Appending archive to EXE F:\PythonCool\pyinstaller\dist\  .exe
18999 INFO: Building EXE from EXE-00.toc completed successfully.
성공 하면 같은 등급 의 디 렉 터 리 아래 에pyinstaller파일 을 생 성 합 니 다.그 안에 코드 파일 이름과 같은 이름 의 실행 가능 한 파일 이 있 습 니 다.

실행 가능 한 파일 을 더 블 클릭 하면dist해석 기 에서python파일 을 직접 실행 할 때 같은 결 과 를 볼 수 있 습 니 다.

여기 서 주의해 야 할 것 은 우리 가 포장 을 할 때 포 장 된 py 파일 의 경 로 를 지정 하고 두 가지 방식 으로 선택 할 필요 가 있다 는 것 이다.
방식 1:포 장 된 py 파일 디 렉 터 리 로 전환 한 다음 포장 명령 을 실행 합 니 다.

(base) C:\Users\Gdc>cd F:\PythonCool\pyinstaller
(base) C:\Users\Gdc>F:
(base) F:\PythonCool\pyinstaller>pyinstaller -F   .py
방식 2:포장 명령 에서 py 파일 의 절대 경 로 를 지정 합 니 다.

(base) C:\Users\Gdc>pyinstaller -F F:\PythonCool\pyinstaller\  .py
성공 적 으로 포 장 된 .py실행 가능 한 파일 에 대해 서 는 아이콘 이 기본 이 고 시작 할 때 명령 행 창 이 표 시 됩 니 다.그렇다면 아이콘 을 어떻게 정의 하거나 명령 행 창 을 지 울 수 있 습 니까?
3.포장 진급 체험
자,다음은 .exe포장 할 때 다른 매개 변수 가 어떤 것들 이 있 는 지,exe아이콘 을 어떻게 사용자 정의 하 는 지,명령 행 창 을 어떻게 없 애 는 지 등 을 살 펴 보 겠 습 니 다.

(env_test) F:\PythonCool\pyinstaller>pyinstaller -h
pyinstaller그 매개 변수 설명 을 볼 수 있다.여기 서 완전한 전 시 를 하지 않 는 경우 가 많 기 때문에 일부 상용 매개 변 수 를 간략하게 소개 할 수 있다.
매개 변수
설명 하 다.
-F
실행 가능 한 파일 만 들 기
-D
실행 가능 한 프로그램 으로 디 렉 터 리 생 성(여러 파일 포함)
-a
유 니 코드 문자 집합 지원 없 음
-d
debug 버 전의 실행 가능 한 파일
-w
지정 한 프로그램 이 실 행 될 때 명령 행 창 을 표시 하지 않 습 니 다(Windows 에 만 유효 합 니 다)
-c
명령 행 창 실행 프로그램 지정(Windows 에 만 유효)
-o
spec 파일 의 생 성 디 렉 터 리 를 지정 합 니 다.지정 되 지 않 으 면 현재 디 렉 터 리 를 사용 하여 spec 파일 을 생 성 합 니 다.
-p
Python 가 져 오기 모듈 의 경 로 를 설정 합 니 다(PYTHONPATH 환경 변 수 를 설정 하 는 것 과 비슷 합 니 다).경로 구분자(Windows 는 분점,Linux 는 콜론)를 사용 하여 여러 경 로 를 구분 할 수 있 습 니 다.
-n
항목 이름 을 지정 합 니 다.이 옵션 을 생략 하면 첫 번 째 스 크 립 트 의 주 파일 이름 은 spec 의 이름 입 니 다.
사용자 정의 icon 이 있 는 exe 실행 파일 을 포장 합 니 다.
우 리 는 이곳 에 가서 icon 파일 을 다운로드 할 수 있다.
https://www.iconfont.cn/
아이콘 파일 로 그림 을 변환 할 수 있 습 니 다:
https://www.bitbug.net/
그리고 명령 을 사용 하면 exe 아이콘 을 사용자 정의 할 수 있 습 니 다.

(env_test) F:\PythonCool\pyinstaller>pyinstaller -F -i icon.ico   .py 
성공 하면 아이콘 이 사용자 정의 이것 으로 변 하 는 것 을 볼 수 있 습 니 다.

명령 행 팝 업 창 을 제거 하 는 exe 실행 파일 을 압축 합 니 다.
GUI 가 있 는 프로그램 이 라면 시작 할 때 명령 행 창 을 제거 하려 면 다음 명령 으로 포장 할 수 있 습 니 다.exe내 장 된 GUI 라 이브 러 리 를 예 로 들 어 보 여 줍 니 다.

#   .py
import tkinter

top = tkinter.Tk()
#       
top.mainloop()
이상 의 테스트 코드 는 초기 체험 방식 으로 GUI 인터페이스 에 나타 나 는 동시에 명령 행 팝 업 창 이 나타 납 니 다.명령 행 팝 업 창 을 제거 하려 면 다음 과 같이 하 십시오.

(env_test) F:\PythonCool\pyinstaller>pyinstaller -F -w -i icon.ico   .py  
포 장 된pyinstaller -h파일 을 더 블 클릭 하면 GUI 인터페이스 만 나타 나 고 명령 행 창 은 나타 나 지 않 습 니 다.

4.설정 파일 패키지
프로필 패키지 란 패키지 할 때 py 파일,의존 하 는 라 이브 러 리 를 제외 하고 인용 해 야 할 다른 자원 파일 이 존재 하 는 것 을 말한다.상기 방식 으로 직접 포장 할 때 이 자원 들 은 가방 에 넣 을 수 없습니다.우 리 는 포장 할 때의tkinter파일 을 수정 하여 실현 해 야 합 니 다.
spec 파일 은 Pyinstaller 에 py 파일 을 어떻게 포장 하 는 지 알려 주 는 것 입 니 다.예 를 들 어 경로,자원,동적 라 이브 러 리,암시 적 호출 모듈 등 입 니 다.일반적으로 우 리 는 그것 에 대해 수정 할 필요 가 없다.
여기 서 나 는 이전에 의 사례 로 소개 한다.
우 리 는 직접 포장 진급 체험 중의 명령 으로 성공 적 으로 포장 할 수 있 지만 여기 서 우 리 는 두 가지 문 제 를 발견 했다.① 가방 이 매우 크 고 이전 사례 보다 10 배 정도 크다.② exe 파일 을 시작 할 때 오류 가 발생 했 습 니 다.

패키지 가 비교적 큰 경우 가상 환경 을 만 들 고 프로그램 에서 호출 할 라 이브 러 리 만 설치 하면 됩 니 다.여 기 는 간단하게 소개 합 니 다.

#       
conda create -n your_env_name python=3.8.10
#       
activate your_env_name
시작 오류 에 관 한 상황 은 비교적 복잡 하기 때문에 우 리 는 한 걸음 한 걸음 볼 것 이다.
① 명령 이 없 는 팝 업 창 으로 인해 구체 적 인 오 류 를 볼 수 없습니다.여기 서 먼저 명령 행 창 형식 으로 오 류 를 보고 하 겠 습 니 다.우 리 는 다음 과 같은 오 류 를 보 았 습 니 다.

이 파일 이 부족 하 다 는 것 을 알려 줍 니 다.압축 된exe프로필 에 이 자원 을 올 릴 수 있 습 니 다.

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

block_cipher = None

a = Analysis(['      .py'],
             pathex=['F:\\PythonCool\\pyinstaller'],
             binaries=[],
             datas=[], #           
             hiddenimports=[], #          
             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='      ',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True , icon='icon.ico')
spec모듈 디 렉 터 리 에서 .spec파일 을 찾 아 데이터 에 넣 었 습 니 다.

datas=[('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\wordcloud\\stopwords','wordcloud')],
전 자 는 자원 파일 이 이 컴퓨터 의 위치 에 있 고 후 자 는 포장 후 파일 을 호출 하 는 상대 적 인 경로 입 니 다.wordcloud파일 을 편집 한 후에 다음 명령 을 통 해 포장 합 니 다.

(env_test) F:\PythonCool\pyinstaller>pyinstaller -D       .spec  

좋아,아직 가방 에 넣 지 않 은 서류 가 있어 서 또 같은 문제 가 생 겼 어.그래서 우 리 는 모든 자원 파일 을 spec 파일 의 data 에 추가 해 야 합 니 다.
우 리 는 모든 자원 파일 을 찾 아서 모두 추가 한 후에 포장 명령 을 실행 합 시다.

datas=[('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\stylecloud\\static','stylecloud\\static'),
    ('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\wordcloud\\stopwords','wordcloud'),
    ('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\jieba\\analyse\\idf.txt','jieba\\analyse'),
    ('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\jieba\\dict.txt','jieba')]
우 리 는 자원 을 가방 에 넣 은 후에 exe 실행 가능 한 파일 을 정상적으로 시작 할 수 있 습 니 다.

그러나 단어 구름 을 그 릴 때 도 오류 가 발생 한 다 는 것 을 발견 했다.그런데 신문 을 잘못 본 경 우 는 힌트stopwords입 니 다.그렇다면 이 건 어떤 상황 일 까요?!
5.암시 적 호출 라 이브 러 리 추가
우 리 는 잘못된 곳 코드 를 찾 았 습 니 다.다음 과 같 습 니 다.spec함 수 를 동적 로드 클래스 와 함수 xx 모듈 에 사용 합 니 다.

def gen_palette(palette: str):
    """Generates the corresponding palette function from `palettable`."""
    palette_split = palette.split(".")
    palette_name = palette_split[-1]

    # https://stackoverflow.com/a/6677505
    palette_func = getattr(
        __import__(
            "palettable.{}".format(".".join(palette_split[:-1])),
            fromlist=[palette_name],
        ),
        palette_name,
    )
    return palette_func
이 문제 에 대하 여 나 는 두 가지 방안 을 시험 해 보 았 으 니,여러분 은 참고 하 셔 도 됩 니 다.
프로젝트 1:spec 파일 에 hiddenforts 에 동적 인용 모듈 추가

hiddenimports=['palettable'], #          
이 경우__import__()라 이브 러 리 에 도 spec 파일 에 추가 해 야 할 프로필 이 있 습 니 다.data

('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\palettable\\colorbrewer\\data','palettable\\colorbrewer\\data')
프로젝트 2:stylecloud 라 이브 러 리 에서 palettable 모듈 을 호출 하 는 코드 부분 을 수정 합 니 다.

import palettable
def gen_palette(palette: str):
    palette_func = getattr(palettable.tableau,'BlueRed_6')
    return palette_func
 
    # """Generates the corresponding palette function from `palettable`."""
    # palette_split = palette.split(".")
    # palette_name = palette_split[-1]

    #    https://stackoverflow.com/a/6677505
    # palette_func = getattr(
        # __import__(
            # "palettable.{}".format(".".join(palette_split[:-1])),
            # fromlist=[palette_name],
        # ),
        # palette_name,
    # )
4 번 과 5 번 부분 을 통 해 우 리 는 pyinstaller 로 마침내 포장 에 성공 하고 정상적으로 실행 되 었 다.

이상 은 이번 의 모든 내용 입 니 다.여러분 이 포장 을 만 났 을 때 설정 파일 이나 암시 적 호출 과 관련 된 경우 이 두 가지 기술 로 특수 포장 을 할 수 있 습 니 다!
그러나 pyinstaller 포장 에 대해 더 많은 조작 이 있 습 니 다.공식 문 서 를 많이 보 셔 서 알 수 있 습 니 다.주로 명령 행 파라미터 와 spec 파일 의 설정 요점 입 니 다.
Pyinstaller 패키지 의 고급 용법 을 정리 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Pyinstaller 패키지 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기