2012-08-29 3 views
0

순수 모듈과 스크립트를 모두 포함하는 Python 패키지를 만들었습니다.이 패키지는 모두 같은 폴더에 있습니다. 내가의 distutils를 사용하여 배포 패키지로를 설정했습니다, 그래서 지금은 다른 사람과이 패키지를 공유 할설치 가능한 distutils 패키지 : 동일한 패키지의 일부인 명령 줄 스크립트에서 패키지 모듈을 가져 오려면 어떻게합니까?

import *module* 

: 간단하게 가져올 수 있도록 스크립트는 모듈 내에서 기능을 사용할 수 있도록해야합니다.

setup(..., 
    scripts=['path/to/script/a', 'path/to/script/b'] 
    ) 

이 패키지를 설치 한 후, 나는의 distutils 내 명령의 사본을 설치 한주의 사항 :의 distutils에 대한 documentation의 지시에 따라 다음과 같이 나는 'setup.py'내 패키지 내의 스크립트 파일을 선언했습니다 라인 스크립트를 파이썬 설치 내 'Scripts'폴더에 복사합니다. 모두 좋고 좋아. 더 이상 모듈을 찾을 수 있도록 스크립트와 모듈 사이의 상대 경로는 설치 후 변경 되었기 때문에

ImportError: No module named *module* 

는 아마도 이것이다 : 내가 실행에게 이러한 스크립트 중 하나를하려고하면 지금, 그것은 실패합니다. 그래서 내 질문은, 어떻게 distutils 사전 사후 설치 및 사후 설치 모두에서 작동하도록 동일한 패키지 내의 스크립트에서 모듈을 가져 오기로되어 있습니까?

지금은 쉽게과 같이 내 모듈 가져 오기를 수정하여이 문제를 해결할 수 :

try: 
    import *module* 
except ImportError: 
    from *package* import *module* 

이 해킹의 비트처럼 보인다. 여기에 속임수가 없습니까? 나는 distutils가 나를 위해 이것을 돌볼 것이라고 기대했을 것이다. 이것을 처리하는 더 낫고 더 튼튼한 방법이 있습니까?

+0

어쩌면 setuptools'가'시도 -에 좋은 방법이 [를 automaticly 주요 스크립트를 작성 (http://packages.python.org/distribute/setuptools.html#automatic-script-creation) –

+0

@ KonradHałas : 예, disutils 옵션보다 스크립트를 설치하는 데 더 좋은 해결책입니다. 어쩌면 이것을 대답으로 제출 하시겠습니까? –

답변

0

아마도 setuptools을 시도해보십시오. 좋은 방법이 automatically create main script입니다. 짧은 예 :

setup(
    # other arguments here... 
    entry_points = { 
     'console_scripts': [ 
      'foo = my_package.some_module:main_func', 
      'bar = other_module:some_func', 
     ], 
     'gui_scripts': [ 
      'baz = my_package_gui.start_func', 
     ] 
    } 
)