2008-10-10 8 views
28

어떻게 Linux에서 독립 실행 형 Python 응용 프로그램을 배포 할 수 있습니까?Linux의 독립 실행 형 파이썬 응용 프로그램

나는 현대 배포판에서 최근 파이썬 인터프리터의 존재를 당연한 것으로 생각한다. 문제는 표준 라이브러리에 속하지 않는 라이브러리, 즉 wxPython, scipy, python 암호화 툴킷, reportlab 등을 다루는 것입니다.

py2exe (필자는 절대로 시도한 적이없는 리눅스)와 호환되는 Linux가 있습니까? 무료 오픈 소스 소프트웨어가 있습니까?

답변

-10

아니요.

파이썬은 다른 설정과 관련하여 악명이 높습니다. Python 앱을 배포하는 유일한 방법은 의존하는 전체 인터프리터 및 라이브러리 번들을 코드와 함께 제공하는 것입니다. 그럴 가능성이 높습니다.

+2

그건 내 경험이 아니야. 물론 제 3 자 라이브러리를 잘못 설정하거나 파이썬을 잘못 설치할 수는 있지만 일반적으로 표준 파이썬 프로그램에는 문제가 없었습니다. 새로운 기능을 사용할 때 이전 버전으로 이동하는 것을 제외하고 :). 아마 당신은 자바 (tm)를 생각하고 있었습니까? –

+0

@ A.L.Flanagan : 사실 자바를 싫어하기 때문에 소프트웨어 배포에 대해 꽤 강건하다는 것을 알았습니다. – Marcin

7

배포 중립적 인 형식으로는 쉽게 수행 할 수 없습니다. 유일한 신뢰할 수있는 종속성 추적 메커니즘은 배포본의 패키지 관리 시스템에 내장되어 있으며 배포마다 다릅니다. Fedora 용 rpm, 우분투 및 debian 용 deb 등을 효과적으로 처리 할 수 ​​있습니다.

Py2exe는 Windows에서 정상적으로 작동합니다. 필요한 모든 DLL과 프로그램을 시작하는 파이썬 인터프리터에 대한 래퍼가있는 배포판을 만듭니다. 설치하기가 상당히 간단합니다. 단지 디렉토리에 놓으십시오. 따라서 msi 파일을 만드는 것은 간단합니다.

9

종속성 선언을 setuptools에보고 싶을 수 있습니다. 이렇게하면 적절한 패키지가 환경에서 사용 가능하거나 적절한 권한을 가진 사람이 설치할 수 있음을 보증하는 방법이 제공 될 수 있습니다.

+0

@ S.Lott이 알고 있지만 다른 사람들에게 : 이것은 파이썬 라이브러리 또는 응용 프로그램을 다른 개발자에게 배포하는 훌륭한 방법입니다. 응용 프로그램이 작동하기 전에 올바른 버전의 Python을 설치하지 않아도됩니다. 그러나 Python이 무엇인지 알지 못하는 최종 사용자에게 배포하는 것은 절대적으로 잘못된 방법입니다. 응용 프로그램을 작동시키기 위해 절대 설치하지 않을 것이며, 0.2 %의 사람들은 잘못된 설치를 할 것입니다 번역. –

22

Deb (데비안에서 파생 된 모든 것) 및 rpm (Fedora/SuSE의 경우)을 만듭니다. 패키징에 올바른 종속성을 추가하면 제대로 작동 할 것이라고 확신 할 수 있습니다.

+1

+1이 아이디어를 리눅스 패키지의 제안을위한 –

+7

이 끝을 끝내기위한 좋은 참조? – fabrizioM

+0

http://showmedo.com/videotutorials/video?name=linuxJensMakingDeb&fromSeriesID=37 – bagonyi

5

Setuptools는 내 프로그램의 사용량이 매우 제한되어있어 과도한 무기이므로 내 자생 대안을 제시합니다.

전제 조건을 모두 포함하는 "타사"디렉토리를 번들로 제공하고 site.addsitedir을 사용하여 전 세계적으로 설치할 필요가 없습니다.

# program startup code 
import os 
import sys 
import site 
path = os.path.abspath(os.path.dirname(__file__)) 
ver = 'python%d.%d' % sys.version_info[:2] 
thirdparty = os.path.join(path, 'third-party', 'lib', ver, 'site-packages') 
site.addsitedir(thirdparty) 

대부분의 필자는 setup.py 설치 프로그램을 사용합니다. 번들로 제공되는 각 모듈에는 자체 "설치"프로세스가 있으므로 사용자 정의 된 항목 (예 : ./configure)이 자동으로 실행될 수 있습니다. 내 설치 스크립트는이 makefile을 설치 프로세스의 일부로 실행합니다.

# sample third-party/Makefile 
PYTHON_VER = `python -c "import sys; \ 
     print 'python%d.%d' % sys.version_info[:2]"` 
PYTHON_PATH = lib/$(PYTHON_VER)/site-packages 
MODS = egenix-mx-base-3.0.0 # etc 

.PHONY: all init clean realclean $(MODS) 
all: $(MODS) 
$(MODS): init 
init: 
    mkdir -p bin 
    mkdir -p $(PYTHON_PATH) 
clean: 
    rm -rf $(MODS) 
realclean: clean 
    rm -rf bin 
    rm -rf lib 

egenix-mx-base-3.0.0: 
    tar xzf [email protected] 
    cd [email protected] && python setup.py install --prefix=.. 
    rm -rf [email protected] 
10

cx_Freeze을 사용하면이 작업을 수행 할 수 있습니다. 그것은 마치 py2exe (인터프리터와 시작 스크립트와 필요한 모든 라이브러리와 모듈을 묶음)와 비슷하지만 리눅스와 윈도우 모두에서 작동합니다.

실행되는 환경에서 종속성을 수집합니다. 즉, 종속성도 대상에 적합해야합니다. 데비안 32 비트를 빌드하고 다른 32 비트 데비안을 배포하는 것과 같은 일을한다면 괜찮습니다.적절한 환경 (예 : 32 비트 및 64 비트 chroot)에 여러 버전을 빌드하고 적절한 버전을 배포하여 32/64 비트 차이를 처리 할 수 ​​있습니다. 좀 더 일반적인 것을 원한다면 (예 : 데비안에서 빌드하고 배포판에 배포하십시오), 의존성이 무엇인지에 따라 약간 어색해질 수 있습니다.

상당히 간단한 배포 (예 : 빌드 환경 및 배포 환경이 비슷하다는 것을 알고있는 경우)에서는 다소 복잡한 rpm/deb/egg/etc 단계를 피할 수 있습니다 (특히 cx_Freeze를 사용하면 매우 쉽습니다. 특히 py2exe에 익숙하다면). 그렇지 않다면, 자신의 의존성 설치 프로그램을 deb/rpm/egg/etc 건물로 옮기는 것에서 당신이하고 싶은 작업의 양, 제공하고자하는 버전의 유연성 정도, 의존성이 무엇인지에 따라 다르다.

0

대부분의 현대 리눅스 배포본에서 당연히 받아 들여지는 파이썬 지원을받을 수 있다고 생각합니다. 정상적인 오류 메시지가 제공되는 한 사용자는 아마도 스스로 가져 오는 방법을 알아낼 수있을 것입니다 (당신은 이것을 위해 간단한 bash 시작 스크립트를 사용할 수있다) :

#!/bin/bash 
if [ -e /usr/bin/python ] 
then 
    echo "Python found!" 
else 
    echo "Python missing!" 
fi 
관련 문제