2012-01-17 2 views
9

두 개의 개별 파이썬 패키지를 생성하고 싶은 프로젝트가 있습니다. pip를 사용하여이 패키지들을 설치하고 싶습니다.여러 setup.py 스크립트를 사용하는 여러 프로젝트가 있습니까?

: 나는 script_name 매개 변수를 설정 setup_foo.py에서

/myproject 
    setup_foo.py 
    setup_bar.py 
    /mypackage1 
    /mypackage2 
    ... 

: 그래서 이런 구조를 시도 Multiple projects from one setup.py?

:

이 이전 질문에 대한 답변에서

, 일반적인 권장 사항은 두 setup.py 스크립트를 작성하는 것이 었습니다

from distutils.core import setup 
setup(name = 'foo', 
     version = '2.0.0', 
     ..., 
     script_name = 'setup_foo.py') 

(매개 변수 없이도 아래에서 시도했습니다. 전자 문서 그것은 기본적으로 내가

python setup_foo.py sdist 

를 사용하여 foo-2.0.0.tar.gz을 만들 [0])

sys.argv에합니다하지만 pip install foo-2.0.0.tar.gz, 나는이 같은 오류가 발생하는 경우 :

Unpacking .../foo-2.0.0.tar.gz 
Running setup.py egg_info for package from file:///...foo-2.0.0.tar.gz 
Traceback (most recent call last): 
    File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: '/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: 
'/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 

내가 몇 가지를 놓치고 pip setup_foo.py을 사용하도록 지시하는 방법? 아니면 별도의 디렉토리에 두 개의 스크립트 (둘 다 'setup.py')를 배치해야합니까?

답변

6

질문은 프로젝트를 하나의 디렉토리에 두는 이유입니다. 내 권장 사항은 제대로 그들을 분리하는 것입니다 다음 "setup.py 개발 -U"를 통해 공유 virtualenv에 추가합니다. 그곳에갔습니다. 아름답게 작동합니다.

그렇지 않으면 다음 문제는 "setup.cfg", "MANIFEST.in"등을 공유하게됩니다. 일반적으로 setuptools/distribute의 가정을 깨뜨릴 때마다 불필요한 고통을 많이 겪을 수 있습니다.

명시 적보다 낫다 :

내가을 가정 그렇게 두 패키지는이 명시 적으로 "-U을 개발"하게하고, "이 가져 오기"를 인용, 자동적으로 파이썬 경로에있는 위의 구조를 선택했다 절대적인.

+0

답변 해 주셔서 감사합니다. 제가 설명한 구조를 선택하는 것에 대한 제 이유는 거의 맞습니다. 나는 그들 중의 2 명을 가지고 있었다. 첫째, 나는 PyDev/Eclipse를 사용하고 가능한 경우 프로젝트 간 종속성을 피하고자했습니다. 둘째, 두 배포본은 프로젝트의 거의 모든 패키지를 공유합니다. 두 가지 배포본은 주로 명령 줄 도구가 다른 점을 제외하고는 두 개 또는 세 개의 개별 프로젝트로 분할하는 것이 다소 과한 것처럼 보입니다. 하나의 프로젝트에서 두 개의 배포판이 setuptools를 잘못된 방향으로 문지르는 경우 모든 배포판을 모든 서버에 배포하기 위해 하나의 배포판 만 허용하도록 선택할 수 있습니다. –

+1

영감을 얻으려면 http://code.google.com/p/pyroscope/source/browse/trunk/update-to-head.sh를 참조하십시오. 가상 머신에 설치하는 경우 (항상 프로덕션 머신에서라도), 도구 스텁을 선택적으로 심볼릭 링크하여 선택한 하위 세트를 게시 할 수 있습니다 ("ln -nfs $ (grep -l 'entry_point. * pyrocore == '$ PWD/bin/*) $ {BIN_DIR : ~ ~/bin}/"명령). – pyroscope

+0

영리한! 그렇습니다, 그것은 sripts의 부분 집합을 숨기거나 게시하는 더 간단한 방법입니다. –

0

setuptools는 distutils와는 달리 setup.py라는 설정 스크립트를 지원하지 않습니다. 버그를 setuptools (bugs.python.org/setuptools)에보고하고 (bitbucket에) 개발자를 배포하는 것이 가장 좋을 것이라고 생각합니다.

+1

버그가 아닌 기능 일 수 있습니다. 문제는 "script_name"이 가져야하는 것입니다. 그 문서는 특히 명확하지 않습니다. –

+0

distutils 문서에는 다음이 포함되어 있습니다. http://docs.python.org/distutils/apiref#distutils.core.run_setup –

관련 문제