2011-09-23 3 views
3

저는 파이썬 배포판에 대한 설정 스크립트, foo을 쓰고 있습니다. 내 코드 BeautifulSoup 필요하므로 현재 나의 디렉토리과 같이 구성되어있다 :Python 패키지에서 BeautifulSoup 필요 - setup.py에 필요한 것이 있습니까?

<root>/ 
     setup.py 
     __init__.py 
     foo.py 
     BeautifulSoup/ 
      __init__.py 
      BeautifulSoup.py 
      etc. 

그리고 setup.py 현재이 (이하 메타 정보)과 같습니다

setup(name='foo', 
     version='0.9.0', 
     py_modules=['foo'] 
    ) 

내가 케이스에 BeautifulSoup을 포함 할 사용자는 이미 설치되어 있지 않지만 특정 버전에 이미 설치되어있는 경우 설치하고 싶지 않습니다. Python 2.7.2 docs에서 packages=[...]을 내 setup.py 파일에 포함시켜야한다는 것을 알았습니다.

그러나 Section 2.4. Relationships between Distributions and Packages에는 특정 버전의 패키지가 필요하다고 명시하는 방법이 있습니다. setup.py 내에서 "표현식 필요"를 사용하는 방법에 대한 예제를 찾을 수 없으므로 이것이 필요한지 확실하지 않습니다. 이 패키지는 BeautifulSoup이 필요

, 적어도 X.X.X 버전 : 한마디로

, 내가 말할 수있는 방법이 필요합니다. 해당 버전이 설치되어 있지 않으면 제공된 버전을 사용하십시오.

어떻게하면됩니까?

답변

4

디렉토리 구조 :

<root>/ 
     setup.py 
     foo.py 

참고 : 더 __init__.py 파일이 없습니다. 당신은 종속성을 지정하는 distribute 사용할 수

, setup.py는 : 존재하지 않는 경우에

from setuptools import setup 

setup(name='foo', 
     version='0.9.0', 
     py_modules=['foo'], 
     install_requires=['BeautifulSoup >= X.X.X'], 
) 

BeautifulSoup의 버전이 필요 설치합니다. 이 경우 BeautifulSoup을 제공 할 필요는 없습니다.

자동 BeautifulSoup를 설치하지 않으려면 :

<root>/ 
     setup.py 
     foobar/ 
      __init__.py 
      foo.py 
      BeautifulSoup/ 
       __init__.py 
       BeautifulSoup.py 
       etc. 

setup.py : 당신의 모듈에서의

from setuptools import setup, find_packages 

setup(name='foobar', 
     version='0.9.0', 
     packages=find_packages(), 
) #NOTE: no install_requires 

어딘가에 :

import pkg_resources 
try: 
    pkg_resources.require("BeautifulSoup>=X.X.X") 
except pkg_resources.ResolutionError: 
    from foobar import BeautifulSoup 
else: 
    import BeautifulSoup 

그것은 덜입니다 바람직하고 특이한 방법.

+0

'__init __. py'가 있기 때문에 어떻게 설정 스크립트를 바꿀 수 있습니까? –

+0

@Ben McCormack : 답변을 업데이트했습니다. – jfs

관련 문제