2017-12-07 1 views
7

나는 40MB가 넘는 간단한 pandas pyinstaller exe를 가지고있다.pyinstaller exe의 크기 줄이기

내 EXE 예 : 이것에 대한

import collections 
import csv 
import selenium 
import pandas 

print('hi') 

40메가바이트의 + 조금 잔인한 것 같다.

가능한 한 줄일 수 있습니까?

한 가지 방법 :

pyinstaller --onefile --exclude matplotlib --exclude scipy --exclude pandas --exclude numpy.py 

이 그러나 제외 목록이 것이 얼마나 큰 고려 실용적이지 못하다.

모듈을 가져오고 제외시키기 위해 pyinstaller 폴더를 어떻게 선택합니까? 작은 응용 프로그램이있을 수 있습니다.

사양 파일 : 그것은 또한 언급 할 가치가

a = Analysis(['123.py'], 
      pathex=['C:\\Users\\AA\\ZZ'], 
      binaries=[], 
      datas=[], 
      hiddenimports=[], 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
      cipher=block_cipher) 
exe = EXE(pyz, 
      a.scripts, 
      a.binaries, 
      a.zipfiles, 
      a.datas, 
      name='123', 
      debug=False, 
      strip=False, 
      upx=True, 
      runtime_tmpdir=None, 
      console=True) 

. 기본적으로 Pyinstaller는 팬더를 감지하지 않습니다.

추가 :

hiddenimports = ['pandas._libs.tslibs.timedeltas'] 

To: C:\Users\<NAME>\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyInstaller\hooks 

가능한 solution 여러 개의 실행 파일을 사용하는 경우, 모든 수입과 별도의 폴더 또는 실행에 각각의 실행 파일을 링크 할 수 있습니다.

+0

종속성을 제거하면 exe가 스크립트를 실행할 수 없거나 뭔가 빠졌습니까? –

+1

@FlorentB. Pyinstaller는 필요없는 다른 것들을 패키징합니다. 또한, 해당 EXE 40mb? 나는 그것을 UPX하려고했지만, 그것은 나를 위해 많이 변하지 않습니다. 그 일을 잘못하고 있어야합니다. –

+0

'pyinstaller --onefile test.py' (test.py는 예제를 포함하고 있습니다)를 실행하면 약 5MB의 실행 파일을 얻을 수 있습니다. –

답변

3

것은 VIRTUALENV하여 환경을 설정하려고 및 가상 ENV 작업에 거기에만 필요한 라이브러리에

몇 가지 세부 사항을 설치하는 것은 현재 위치 : https://virtualenv.pypa.io/en/stable/

+0

파일 손상 문제와 파이썬으로 인해 최근에 전체 OS를 다시 설치해야했기 때문에이 작업을 수행하는 것을 주저합니다. 이거 안전한가요? 이것이 가상 박스에서 어떻게 진행되는지 보겠습니다. –

+1

예 - 다소 파이썬 가상 박스와 비슷합니다 - 모든 패키지는 별도의 가상 env에 설치되며 기본 파이썬 설치에는 영향을 미치지 않습니다. 디렉토리를 삭제하는 것만으로도 라이브러리와 버전이 다른 sevral 가상 서버가 있습니다. –

+0

가상 환경에 익숙하지 않지만 반드시 사용해야합니다. 가상 박스에 pyinstaller를 사용하면 문제가 발생합니다. 어쩌면 가상 환경이 수정 될 것입니다. –

0

파이썬 인터프리터 및 가져온 모든 모듈이 포함되어 있습니다 실행 파일.

사양 파일의 Analysis에있는 excludes 목록에 제외 할 모듈을 추가해볼 수 있습니다.

UPX를 사용하여 실행 파일을 압축 할 수도 있습니다. A note on using UPX

+0

기본적으로 upx되지 않습니까? 나는 모듈을 다수 포함하고 있기 때문에 아마 이상적이지 않을 것이다. 주어진 디렉토리를 제외한 모든 모듈을 제외 할 수 있습니까? –

+0

나는 그것이 자동적으로 upxed하다고 생각했다. 나의 실수. Pyinstaller -F --upx-dir C : \ Users \ DD \ Downloads \ upx394w \ upx394w \ 123 \ upx308w \ upx.exe zz.spec이 작동하지 않습니다. –

3

이 두 답변이 모두 우수하다고 생각합니다.

나를 위해, exe가 거대하다는 팬더를 사용하는 간단한 경우입니다.

특정 디렉토리를 제거하는 것이 도움이되었으며, UPXING도 많은 도움이되었습니다.

나는 그것을 많이 줄 였고 기본적으로이 작업을 수행하지 않았습니다.

마지막으로 가장 많은 수입 솔루션은 여기에 있습니다 : Importing Python modules from a select location. 그래서이 모든 것을 수행하는 기능이 있었지만 지금은 수동 처리가 포함되어 있습니다 : 다중 패키지 번들이 손상되었습니다.

지금의 많은에 대한 간단한 솔루션을 EXE의

당신이 많은 실행 파일이있는 경우, 내가보기 엔이 방법을 권장합니다 abc.py 폴더의 하나의 디렉토리에

pyinstaller -F abc.py --onedir (Have all imports of both scripts) 
pyinstaller -F abd.py --onedir (Have all imports of both scripts) 

이제 넣어 abd.exe을 뿐만 아니라 다른 외부 스크립트. 이름이 다르게 지정되었거나 하나의 스크립트 만 실행되는지 확인하십시오.

모든 종속성이 하나의 폴더에 있기 때문에 매우 효과적입니다. 이것이 그것이 어떻게되어야하는지입니다. 따라서이 예에서는 40MB의 폴더가 있다고 가정합니다. 이후에 각각의 추가 exe를 위해, 그것은 단지 40mb보다는 + 5mb (또는 exe가 얼마나 큰지) 일 것입니다.