2009-04-10 8 views
0

나는 빌드 스크립트를 the wonderful Waf tool에 기반하여 재 작성하는 중입니다. (나는 연령대에 따라 SCons를 사용했지만 그 중 으로 너무 느립니다.)Python 확장 모듈을 egg loadable로 설치하지 않고 패키지로 만들려면 어떻게해야합니까?

어쨌든, 나는 다음과 같은 상황에 충돌했고 나는 그것에 해결책을 찾을 수 없습니다 : 내가 이전에 내장 된 계란 파일의 수에 의존하는 제품이

  • .
  • 빌드 프로세스의 일부로 PyInstaller을 사용하여 제품을 패키징하려고합니다.
  • 먼저 종속성을 빌드합니다.
  • 다음으로 PyInstaller를 실행하여 내가 만든 달걀에 달린 제품을 포장하고 싶습니다. PyInstaller가 패키징 프로세스의 일부로 해당 egg 파일을로드 할 수 있어야합니다.

이 쉽게 소리 : 당신이 PYTHONPATH이 있어야 할 어떤 운동까지 제대로 변수를 설정 sys.environ의 사본을 구성하고 ENV 인수로 이전에 구성된 환경을 통과 subprocess.Popen를 사용하여 pyInstaller 중에 스크립트를 호출합니다.

PYTHONPATH 만 설정하면 추가 할 달걀이 zipsafe로 패키지 된 확장 모듈 인 경우 충분하지 않은 것입니다. 이 경우 임베디드 라이브러리를 가져올 수 없습니다.

달걀 압축을 풀면 (디렉토리 이름을 .egg로 바꿉니다.) 더 이상 설정하지 않고 가져올 수 있지만이 경우 원하는 것은 아닙니다.

또한 수행하여 서브 쉘에서 가져올 계란을 얻을 수있는 다음

  • 가 가져올 계란 (안 계란 자체의 경로)
  • 이 포함 된 디렉토리로 PYTHONPATH 설정
  • 파이썬 셸을로드하고 pkg_resources.require을 사용하여 알을 찾습니다.

정상적으로 완료되면 계란이 정상적으로로드됩니다. 다시 말하지만, 이것은 내가 달걀을 가져올 준비가되어있는 방식으로 파이썬 쉘을 돌릴 수 있어야하기 때문에 실용적이지 않습니다.

더티 옵션은 ​​실제 대상 스크립트를 호출하기 전에 위의 조치를 취한 래퍼 스크립트를 출력하는 것이지만 잘못된 작업 인 것처럼 보입니다. 더 나은 방법이 있어야합니다.

답변

3

흠,이게 내 잘못이라고 생각합니다. 문제는 확장 패키지에 대한 setup.py의 zipsafe 플래그가 False로 설정되어있어 마치이 플래그로 처리하는 데 영향을 미치는 것으로 보입니다.

이제 True로 설정 했으므로 각 계란 파일을 PYTHONPATH에 간단히 추가하여 가져올 수 있습니다.

다른 사람이이 대답을 유용하다고 생각합니다.

1

당신이 해결책을 가지고 있지만, 당신은 항상 당신이 코어 시스템 파이썬 덤비는없이 테스트 파이썬 패키지를 설치하고 할 수있는 파이썬의 가상 환경을 만듭니다 "VIRTUALENV"시도해 볼 수도 있습니다 :

http://pypi.python.org/pypi/virtualenv

+0

그것 좋은 답변, 그리고 나는 몇 곳에서 VirtualEnv를 사용하지만, 여기서는 하나의 스크립트를 호출하기위한 목적으로 전체 가상 환경을 설정하고 싶지 않습니다. 즉, 비슷한 문제가있는 다른 사람을 도울 수 있습니다. – jkp