2011-05-11 4 views
3

내가 일하는 대기업은 Setuptools의 사용자 지정 버전을 사용합니다. setuptools의이 개인 포크는 조직에 고유 한 특정 네트워킹 및 보안 문제를 처리하기위한 것입니다. 결론은 표준 Setuptools 나 Distribute가 우리 환경에서 예상대로 작동하지 않는다는 것입니다.VirtualEnv에서 setuptools의 사용자 지정 버전을 사용하려면 어떻게해야합니까?

이안 비킹의 탁월한 VirtualEnv 도구를 시스템에서 사용하고 싶습니다. 특히 테스트 코드 용 샌드 박스 영역을 많이 설정할 수 있어야합니다. 우리의 지속적인 통합 환경에서.

불행히도 새로운 가상 환경을 만들려고 할 때마다 virtualenv 도구는 최신 공식 Setuptools 버전을 설치하려고 시도합니다. 위에서 언급 한 이유로 실패 할 수도 있으며, 기업 방화벽이 조치를 차단할 수도 있기 때문에 실패 할 수 있습니다. 대신 공식 버전을 설치

:

setuptools-0.6c11-py2.4.egg 

내가 좋아하는 뭔가를 호출 할 수있다 우리의 사용자 정의 버전을 설치하려면 :

이 계란은 항상 보장 할 수

setuptools-foo-0.6c11-py2.4.egg 
을 찾을 수를 시스템의 글로벌 사이트 패키지에 있습니다. 또한 모든 회사의 계란 서버에 해당 제품이 있음을 보장 할 수 있습니다.

내 virtualenv에서 일반적인 사용자 정의 setuptools를 사용할 수 있도록 도와 줄 수 있습니까?

답변

2

이름은 virtualenv.py에 하드 코드되어 있습니다. virtualenv.py를 패치하거나 패치 된 setuptools의 이름을 지정해야합니다. 'setuptools-0.6c11-py2.4.egg'

1

virtualenv를 가져 오는 내 자신의 래퍼 스크립트를 작성했습니다. 주된 이유는을 포함하여 대부분의 종속성을 dpkgs를 사용하여 설치하므로 새 환경을 만들 때 추가 복사본을 다운로드하지 않는 것이 좋습니다.이 방법은 훨씬 빠르게 실행되는 보너스입니다.

다음은 처음에 사용할 수있는 기본 래퍼입니다. 난 당신이 몇 가지 코드/심볼릭 링크 VIRTUALENV에 사용자 정의 setuptools에 코드를 복사하기 위해 삽입 할 수 코멘트를 추가했습니다 :

import os, subprocess, sys, virtualenv 

# virtualenv changed its internal api slightly after 1.5. 
NEW_API = (1, 5) 

def get_version(version): 
    return tuple([int(v) for v in version.split('.')]) 

def main(): 
    # set the logging level here 
    level = virtualenv.Logger.level_for_integer(0) 
    logger = virtualenv.Logger([(level, sys.stdout)]) 
    virtualenv.logger = logger 

    # insert your command-line parsing code here, if needed 
    root = sys.argv[1] 

    home, lib, inc, bin = virtualenv.path_locations(root) 
    result = virtualenv.install_python(home, lib, inc, bin, 
      site_packages=True, clear=False) 
    pyexec = os.path.abspath(result) 
    version = get_version(virtualenv.virtualenv_version) 
    if version < NEW_API: 
     virtualenv.install_distutils(lib, home) 
    else: 
     virtualenv.install_distutils(home) 
    virtualenv.install_activate(home, bin) 

    # insert whatever post-virtualenv-setup code you need here 

if __name__ == '__main__': 
    main() 

사용법 :

% python wrapper.py [path] 
0

지역을 정의 할 수있는 옵션 --extra-search-dir있다 setuptools의 원하는 버전이 들어있는 디렉토리. 자세한 내용은 docs에서 설명합니다.