2012-07-11 3 views
17

영역 파일을 구문 분석하기위한 dnspython에 대한 종속성이있는 간단한 스크립트가 있습니다. 이 스크립트를 단일 .py로 배포하고 싶습니다. 사용자가 2.6/2.7을 설치 한 경우에만 실행할 수 있습니다. 기존 패키지/버전과의 충돌이있을 수 있으므로 사이트 전체에 종속물을 설치하지 않으려 고하지 않으며 virtualenv를 사용하여 해당 버전을 제거하려고하지 마십시오. 스크립트 (gzip/base64) 안에 dnspython과 같은 패키지를 임베드하고 런타임에 스크립트에 액세스하는 방법이 있는지 궁금합니다. 아마도/tmp 디렉토리에 압축을 풀고 그것을 sys.path에 추가 할 것인가? 나는 시작 오버 헤드에 대해 걱정하지 않는다, 나는 배포 할 수있는 단일 .py w/all 의존성을 포함하기를 원한다.python 스크립트에 종속성을 포함시키는 방법이 있습니까?

또한 빌드 할 C 의존성이 없으며 순수한 Python 패키지 만 존재합니다.

편집 : 스크립트는 .py 일 필요는 없습니다. 단일 실행 파일 일뿐입니다.

+3

하나의 파일 제한을 완화 할 수 있다면 zip 파일이나 일반 독립형 파일과 같이 .py 파일과 함께 dnspython 라이브러리를 패키지하면 종속성 문제를 해결할 수 있습니다. 당신은 단 하나의 파일을 갖는 것에 대해 강경합니까? –

+4

면허증을 도로에 묻어두면 ... –

+0

@MahmoudAbdelkader 그게 효과가 있다고 생각합니다. 파이썬은 다른 곳을보기 전에 현재 디렉토리에서 패키지를 찾을 것입니다 (그러나이 순서는 3으로 변경됩니다). 여전히 모든 의존성을 사용자가 실행할 수 있고 아무런 문제도없는 하나의 실행 파일로 패키지하는 방법이 있었으면 좋겠다. 나는 그것이 .py 일 필요는 없다고 생각한다. –

답변

8

여러 개의 파이썬 파일을 .egg로 패키지화 할 수 있습니다. 계란 파일은 기본적으로 잘 정의 된 메타 데이터가있는 zip 아카이브입니다. setuptools 문서에서이를 수행하는 방법을 살펴보십시오. docs에 따라 엔트리 포인트를 지정하여 egg 파일을 직접 실행 가능하게 만들 수 있습니다. 이렇게하면 코드 + 다른 모든 종속성을 포함 할 수있는 단일 실행 파일이 제공됩니다.

편집 : 요즘 나는 이것을하기 위해 펜스 (pex)를 만드는 것이 좋습니다. pex는 기본적으로 stdlib가 아닌 종속성을 가진 실행 가능한 zip 파일입니다. 파이썬 배포본 (py2app/py2exe와 같은)을 포함하고 있지 않지만 다른 모든 것을 가지고 있으며 단일 명령 행 호출로 빌드 될 수 있습니다. https://pex.readthedocs.org/en/latest/

+1

고마워, 나는 이제 setuptools로 지어진 달걀을 얻으려고했다. 언제나 그들이 은혜를 잃어 버렸다는 것을 항상 들었던 것처럼 전에 계란을 만들지 못했습니다. –

2

제발하지 마세요. 너는 그 습관을 버리지 마라.

  • pydns는 BDS는 허가하지만,이 방법을 "삽입"는 GPL 모듈을하려고하면 문제가
  • 에서 얻을 수있는 당신은 setuptools를 사용하는 방법을 배우게 수 있으며 장기적으로 훨씬 더 행복 할 것
  • setuptools는 사용자가 식별 한 종속성 설치를 처리합니다 (사용중인 pydn이 순수한 python인지 확실하지 않으므로 자신의 환경을 모른 채 직접 추가하려고하면 사용자에게 문제가 발생할 수 있음)
  • 사람들이 easy_install -U
  • 로 스크립트를 업그레이드 할 수 있도록 url이나 pypi를 설정하십시오
+0

내가 사용중인 패키지는 pydns가 아닌 dnspython입니다.setuptools가 Python 2.6/2.7 만 필요로하는 하나의 배포 가능한 실행 파일을 만들면 사용할 것입니다. 만약 당신이 간단하게 의존성 사이트를 설치하기 위해 그것을 사용하는 것이 아니라면 이것은 내가 요구 한 것이 아닙니다. dnspython은 순수한 파이썬이며 임베디드를 막을 수있는 라이선스가 없다. 최종 사용자는 개발자가 아니며 파이썬 생태계 (setuptools/easy_install/pip/virtaulenv/etc)에 대해 알지 못합니다. –

3

가장 간단한 방법은 우편 아카이브, example 순수 파이썬 종속성 __main__.py라는 이름의 파이썬 스크립트를 넣어 것입니다.

그렇지 않으면 PyInstaller을 사용하여 독립 실행 형 실행 파일을 생성 할 수 있습니다.

관련 문제