Pyinstaller 패키지 의 고급 용법 을 정리 합 니 다.
11456 단어 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 패키지 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pyinstaller 패키지 의 고급 용법 을 정리 합 니 다.성공 적 으로 포 장 된 .py실행 가능 한 파일 에 대해 서 는 아이콘 이 기본 이 고 시작 할 때 명령 행 창 이 표 시 됩 니 다.그렇다면 아이콘 을 어떻게 정의 하거나 명령 행 창 을 지 울 수 있 습 니까?...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.