파이썬 스크립트를 독립 실행 형으로 실행하여 종속성없이 실행하는 방법은 무엇입니까?


706

Python 응용 프로그램을 작성 중이며 클라이언트가 Python 및 모듈을 설치하도록 강요하고 싶지 않습니다.

그렇다면 파이썬 스크립트를 독립 실행 파일로 컴파일하는 방법이 있습니까?


307
"클라이언트가 파이썬과 모듈을 설치하도록 강요하고 싶지 않다"는 질문의 일부. 클라이언트가 할 수 없다고 말하는 것은 아니며 개발자가 요구하지 않기를 원한다고 말합니다. 클라이언트가 자신을 대변하기 위해 SO를 읽지 않기 때문에 여기서 논점을 논할 필요는 없습니다. YouTube를 시청하기 위해 Flash 개발 환경을 설치하고 싶지 않거나 Sudoku를 재생하기 위해 C 개발 환경을 사용하거나 Python으로 작성된 Angry Birds 버전을 실행하는 Python 개발 환경을 설치하고 싶지 않습니다. 이것이 재배포 가능한 런타임의 목적입니다.
Dave

답변:


243

당신은 사용할 수 있습니다 py2exe에를 이미 대답 사용으로 사이 썬 키 변환 할 .py파일을 .pyc같은 C 컴파일 된 파일, .dll윈도우와 .so일반보다 되돌릴 더 힘들어, 리눅스에서 .pyo.pyc파일 (이득 성능도하고!)


1
대답 해줘서 고마워요. Cython을 고려했지만 컴파일 된 실행 파일을 실행하려면 여전히 Python이 필요합니다. Cython을 사용하여 스크립트를 .pyc로 컴파일하는 것을 의미합니까? (Cython에 이러한 기능이 있는지는 몰랐습니다)
Jeff

9
닫힌 소스와 무담보의 두 가지 문제 가 있습니다 . 비공개 소스의 경우 Cython을 사용하여 C 라이브러리에서 중요한 코드를 컴파일하십시오 . 딥이없는 경우 py2exe를 사용하고 .pyd (cython 컴파일) 파일로 실행 파일을 만드십시오.
neurino

7
라이브러리 (numpy, scipy, matplotlib)에 대해 무엇을 하시겠습니까? 예를 들어 클라이언트가 컴퓨터에 설치하지 않고 실행 파일에서 matplotlib의 ginput () 함수를 사용하는 방법은 무엇입니까?
chimpsarehungry

@chimpsarehungry 정적 링크는 어떻습니까?
Braden Best

11
마지막 릴리스는 2008 년인 것으로 보입니다. 여전히 유지됩니까?
Zitrax

302

PyInstaller 를 사용 하여 Python 프로그램을 독립형 실행 파일로 패키지 할 수 있습니다 . Windows, Linux 및 Mac에서 작동합니다.

PyInstaller 빠른 시작

PyPI에서 PyInstaller를 설치하십시오.

pip install pyinstaller

프로그램의 디렉토리로 이동하여 다음을 실행하십시오.

pyinstaller yourprogram.py

이 하위 디렉토리에 번들을 생성합니다 dist.

자세한 연습은 설명서를 참조하십시오 .


10
pyinstaller가 단일 .exe 파일로 컴파일 할 수 있다는 점은 주목할 가치가 있습니다. 또한 어느 OS에서 실행되는지, 실행 파일을 Windows에서 실행할 때 .exe로 만듭니다
Richard de Wit

2
@ ItayMoav-Malimovka 그들은 Python 3을 지원하기 위해 노력하고있다 . github.com/pyinstaller/pyinstaller/tree/python3 참조 .
PhoneixS

3
@GeenHenk가 말했듯이 Windows에서 "컴파일"하면 exe를 만들거나 Linux에서는 Windows를 위해 컴파일하거나 (exe를 만들 수 없음) Windows에서 Linux 실행 파일을 만들 수 없습니다. 실행중인 플랫폼의 실행 파일 만 만들 수 있습니다. (Linux에서는 와인을 사용하여 이것을 속일 수 있습니다)
PhoneixS

14
'pyinstaller'를 사용하는 것이 'py2exe'보다 쉽습니다. 그것은 numpy, pandas, 무엇이든을 포함한 모든 의존성을 처리하고 작업 플랫폼에서 단일 실행 파일을 제공합니다!
aks

12
내가 찾던 것과 정확히 같습니다. 그리고 이제 Python 3을 지원합니다! 감사합니다 :)
Daniel Gruszczyk

83

Nuitka 를 조사 할 수도 있습니다 . 파이썬 소스 코드를 사용하여 C ++ API 호출로 변환합니다. 그런 다음 실행 가능한 바이너리 (Linux의 ELF)로 컴파일됩니다. 몇 년 전부터 사용되어 왔으며 광범위한 Python 버전을 지원합니다.

사용하면 성능이 향상 될 수 있습니다. 추천합니다.


5
Nuitka는 멋진 도구입니다. 사용할 필요가 없습니다. 나는 한 가지만 지적했다-그것은 리눅스에만 국한되지 않고- 크로스 플랫폼이다 -그것을 사용해야하는 또 다른 이유.
sjaustirni

5
Nuitka는 Python 2.6, 2.7, 3.2, 3.3 및 3.4에서 작동하며 크로스 플랫폼 (Linux, FreeBSD, NetBSD, MacOS X 및 Windows (32/64 비트))이며 다른 플랫폼도 작동합니다. x86_64 (amd64) 및 arm. 다른 아키텍처도 기본적으로 작동 할 수 있습니다.)
Jonathan Hartley

최신 3.6 ..에서 지원되지 않으며 Windows에서 설정하는 악몽입니다
Tetora

macOS High Sierra + Python 3.5.2의 매력처럼 작동합니다. 감사합니다!
Anthony L.

이것이 독립형 실행 파일을 생성합니까?
목소리

31

Python 2.7을 사용하여 Windows에서 독립 실행 형 파일을 만드는 방법에 대한 유용한 정보를 컴파일하고 싶습니다.

py2exe를 사용 했는데 작동하지만 문제가 있습니다.

이 마지막 이유로 PyInstaller http://www.pyinstaller.org/를 사용해 보았습니다 .

내 의견으로는 다음과 같은 이유로 훨씬 낫습니다.

  • 사용하기가 더 쉽습니다.

예를 들어 다음과 같은 줄로 .bat 파일을 만드는 것이 좋습니다 (pyinstaller.exe는 Windows 경로에 있어야 함).

pyinstaller.exe --onefile MyCode.py

그래서 적어도 파이썬 2.7의 경우 더 좋고 간단한 옵션은 PyInstaller라고 생각합니다.


3
--onefile실행 여전히이와 연결하고자 플래그는, 당신은 Windows에서이 휴대용 만들기 위해 도움이되지 않습니다 api-ms-win-crt-runtime-l1-1-0.dll관통 설치해야 라이브러리 (또는 / 및 기타) vcredist패키지로 제공된다. 따라서 종속성이 여전히 존재하며 실행 전에 설치해야합니다.
Andry

27

예, Python 스크립트를 독립형 실행 파일로 컴파일 할 수 있습니다.

PyInstaller 는 Python 프로그램을 Windows , Linux , Mac OS X , FreeBSD , SolarisAIX 에서 독립형 실행 파일로 변환하는 데 사용할 수 있습니다 . 권장되는 변환기 중 하나입니다.

py2exe 는 Python 스크립트를 Windows 플랫폼에서만 실행 파일로 변환합니다.

Cython 은 Python 프로그래밍 언어와 확장 Cython 프로그래밍 언어 모두를위한 정적 컴파일러입니다.


2
고마워 py2exe를 사용하고 있었고 아이콘을 전혀 사용할 수 없었습니다. PyInstaller는 처음으로 작동했으며 멋지게 보입니다!
Chud37

Linux 및 macOS 용 Windows에서 독립 실행 형 실행 파일을 작성할 수 있습니까? 아니면 VirtualBox에 Linux와 macOS를 설치해야합니까? 랩톱에 충분한 여유 공간이 없습니다.
8Observer8

1
여기 문서에서 내 질문에 대답을 발견 pyinstaller.readthedocs.io/en/stable/...
8Observer8

26

그리고 세 번째 옵션 cx_Freeze은 크로스 플랫폼입니다.


1
여기에 우리는 2019 년 2 월에 cx_Freeze있으며 2017 년 말 이후로 pypi에 대한 릴리스 는 없습니다 .이 프로젝트는 중단 되었습니까?
user9074332

17

py2exe를 좋아할 것 입니다. 당신은 또한 리눅스에서 그것을 수행하기위한 정보를 찾을 수 있습니다


2
그러나 패키지에 모든 옵션을 제공해야합니다.
Jakob Bowyer

14

py2exe를 사용하십시오 .... 아래 설정 파일을 사용하십시오 :

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import matplotlib

 setup(
       console=['PlotMemInfo.py'],

       options={
                'py2exe': {
                'packages' : ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                 'libgdk_pixbuf-2.0-0.dll']
                          }
                },
       data_files = matplotlib.get_py2exe_datafiles()
     )

나는 이것을했고 그것은 python27.dll 파일을 만들었으며 여전히 필요합니다. python27.dll 파일이 들어있는 폴더에서 .exe 파일을 옮기고 .exe 파일이 더 이상 실행되지 않습니다.
mjwrazor

Linux 및 macOS 용 스크립트를 보여줄 수 있습니까? Linux 및 macOS 용 Windows에서 독립형 실행 파일을 작성하려고합니다.
8Observer8

13

나는 pyinstaller , 특히 "windowed"변형을 좋아합니다 :

pyinstaller --onefile --windowed myscript.py

dist / 폴더에 하나의 * .exe 파일이 생성됩니다.


11

또한 python 2.3-2.7 과 같은 이전 버전과의 호환성을 향상 시키기 위해 pyinstaller 를 권장 합니다.
대한 py2exe에 , 당신은 파이썬 2.6이 있어야


pyinstaller에 가져 오기 문제가 있습니다. 예를 들어 : 내 경우에는이 디렉토리에 있습니다 ~ / Documents / python101 / 및 ex50_pycomp.py & ex50.py는이 디렉토리에 있습니다. ex50_pycomp.py 가져 오기 ex50.py. pyinstaller ex50_pycomp.py를 실행하면 모든 호환되고 생성 된 dist가 표시됩니다. 괜찮아? dist / ex50_pycomp /로 cd하고 ex50_pycomp를 실행하면 작동합니다. 이 ex50_pycom을 가상 머신에 넣으면 가져 오기 오류가 표시되고 다른 Linux 상자에 "-bash : ./ex_50_pycom : 이진 파일을 실행할 수 없습니다 : Exec 형식 오류"
driven_spider

prob1 : python2.7을 사용하고 있었지만 pyinstaller는 python3과 이야기했습니다 python3 setup.py build python3 setup.py 설치 python3은 모든 pkg_resources를 얻습니다. import = pkg_resources --onefile file.py --path = my_path rw-rw-r-- my_path : python3의 dist 폴더 pyinstaller --hidden-import = pkg_resources --onefile file.py --path = / usr / local / lib /python3.5/dist-packages/my_code_lib-0+untagged.8.gd264bd5.dirty-py3.5.egg/my_folder -rw-rw-r--
driven_spider

8

Python 3.2 스크립트의 경우 Cxfreeze 만 선택할 수 있습니다. 소스에서 빌드하지 않으면 작동하지 않습니다.

파이썬 2.x의 경우 라이브러리를 출력하는 CxFreeze와 달리 파이썬 프로그램을 단일 실행 파일로 패키지 할 수 있으므로 pyinstaller를 제안합니다.



6

https://wiki.python.org/moin/DistributionUtilities에 나열된 배포 유틸리티 목록을 찾을 수 있습니다 .

bbfreeze를 사용 하고 있으며 잘 작동하고 있습니다 (python 3을 지원 하기는하지만).


stackoverflow.com/questions/33683133/… bbfreeze 아주 좋은 패키지를 사용합니다.
user914425

의존성을 처리하고 관련 py 모듈을 설치합니까?
Volatil3

@ Volatil3 예, 모든 종속성이 처리됩니다. 호스트 시스템에 모듈을 설치하기위한 WRT-다양한 종류의 컴파일이 있습니다. bbfreeze는 모든 것을 여러 .so파일 로 컴파일 하거나 .egg 파일을 직접 복사하며 모두 단일 디렉토리 (또는 단일 파일)에 있어야합니다. 설치가 필요하지 않습니다.
Joe

6
pyinstaller yourfile.py -F --onefile

이렇게하면 Windows에서 독립 실행 형 EXE 파일이 생성됩니다. 중요 참고 : exe 파일은 'dist'라는 폴더에 생성됩니다.

pyinstaller를 사용하여 설치할 수 있습니다 pip install PyInstaller

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


4

python 코드를 정확하게 패키징하지는 않지만 이제 Google에서 심술 ,은 코드를 Go로 변환합니다. 파이썬 C API를 지원하지 않으므로 모든 프로젝트에서 작동하지 않을 수 있습니다.


4

pyinstaller를 사용하여 .exe 바로 가기를 사용하는 대신 더 나은 방법을 찾았습니다 --onefile. 어쨌든 주변에 일부 데이터 파일이있을 수 있으며 사이트 기반 응용 프로그램을 실행하는 경우 프로그램은 html, js, css 파일에도 의존합니다. 이 모든 파일을 어딘가로 옮기는 데 아무런 의미가 없습니다. 대신 작업 경로를 위로 올리면 어떻게 될까요?

, EXE 파일의 바로 가기를 확인 상단으로 이동하고 목표를 설정하고 시작에 경로 지정된대로 DIST에 \ 폴더를가는 상대 경로를 가지고 : Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" "GTFS - 관리자"로 이름을 변경, 그래서 아무것도 바로 가기 이름을 바꿀 수 있습니다
때 두 번 지금 -바로 가기를 클릭하면 마치 파일을 파이썬에서 실행하는 것처럼 보입니다! 이 방법은 다음 방법보다 낫습니다 --onefile.

  1. 한 파일의 경우, 사전 설치 등이 필요한 win7 OS의 .dll 누락 문제가 있습니다. Yawn. 여러 파일로 일반적인 빌드를 사용하면 그러한 문제가 없습니다.
  2. 내 파이썬 스크립트가 사용하는 모든 파일 (토네이도 웹 서버를 배포 중이며 거기에있을만한 가치가있는 전체 웹 사이트가 필요합니다!)은 어디로 옮길 필요가 없습니다. 단순히 바로 가기를 만듭니다.
  3. 실제로 우분투 (python3 myfile.py 실행)와 창 (바로 가기를 두 번 클릭) 에서이 동일한 폴더를 사용할 수 있습니다.
  4. 데이터 파일 등을 포함하기 위해 지나치게 복잡한 .spec 파일 해킹을 신경 쓰지 않아도됩니다.

아, 빌드 후 빌드 폴더를 삭제해야 크기가 절약됩니다.


안녕하세요, 방금 업데이트했습니다. UPX 압축을 포기하고 --onefile 방식으로 최종 결정했습니다. UPX에는 현재 특정 DLL 압축에 버그가 있기 때문에 하나를 선택해야했습니다.
Nikhil VJ

3

Cython을 사용하여 c로 변환하고 컴파일하고 gcc와 연결하십시오. 또 다른 방법은 c에서 핵심 기능을 만들고 (역전하기 싫은 기능) 컴파일하고 파이썬 부스트를 사용하여 컴파일 된 코드를 가져 오는 것입니다 (더 빠른 코드 실행). 그런 다음 언급 된 도구를 사용하여 배포하십시오.


1

PyRun, https://www.egenix.com/products/python/PyRun/ 도 옵션 이라고 들었습니다 .


5
솔루션에 대한 링크는 환영하지만 답변없이 유용한 답변을 얻으십시오 . 링크 주위에 컨텍스트를 추가 하여 동료 사용자가 그 이유와 그 이유를 파악한 다음 페이지의 가장 관련성이 높은 부분을 인용하십시오. 대상 페이지를 사용할 수없는 경우 다시 연결 링크에 불과한 답변은 삭제 될 수 있습니다.
Petter Friberg

이 옵션은 현재 Windows를 지원하지 않습니다.
bob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.