2011-12-23 3 views
3

일련의 스크립트가있는 mypackage라는 python 패키지가 있다고 가정합니다. mypackage가 site-packages 디렉토리에 있으면 사용자는 mypackage 내의 다양한 Python 파일을 Python의 mypackage.submodule1, mypackage.submodule2로 평소와 같이 참조 할 수 있습니다. 그러나 이들 중 일부는 명령 행에서 호출되는 스크립트입니다. 예를 들어 submodule1, 나는이 : "myPackage에"는 자신의 경로에 일단 사용자가 깨끗하게 명령 줄 스크립트와 같은 이러한 서브 모듈을 사용할 수 있도록python 패키지로 실행 스크립트를 배포하는 올바른 방법은 무엇입니까?

== mypackage/submodule1.py == 

if __name__ == '__main__': 
    main() 

def main(): 
    # parse command line options here, do stuff 

어떻게 제대로 패키지 myPackage에/배포 할 수 있습니까? 나는 당신이 할 수 있다고 생각했을 것입니다 :

python mypackage.submodule1.py arg1 arg2 ... 

그러나이 구문은 유효하지 않습니다. 다시 말해, 사용자가 Python 패키지에서 실제로 가져 오는 "mypackage"디렉토리를 필요로하지 않고 Py에서 패키지를 가져 오기보다는 내 패키지의 서브 모듈을 스크립트로 참조 할 수 있습니까? ("mypackage"가 포함 된 최상위 디렉토리 인 site-packages 만 PYTHONPATH에 있어야합니다.)

감사합니다.

답변

3

은 일반적인 아이디어는 사용자가 파이썬 setup.py 설치를 실행할 때, 스크립트가 경로에 배치됩니다 있도록하는 setup.py 파일을 배포하는 것입니다 http://docs.python.org/distutils/setupscript.html#installing-scripts

를 참조하십시오. 거의 모든 패키지 배포 방법이이를 지원합니다. 위의 문서를 따르는 경우 사용자는 해당 시스템에서 허용하는대로 easy_install, pip install 등을 사용할 수 있습니다.

예를 들어, https://github.com/django/django/blob/master/setup.py을 참조하십시오. 이 파일의 맨 위에있는 구성의 많은,하지만 중요한 비트는이 장고 패키지를 설치하는 사용자를위한 django-admin.py 명령을 설정

setup(
    ... 
    scripts = ['django/bin/django-admin.py'], 
    ... 
) 

볼 수 있습니다 하단에 있습니다. 설치가 완료되면 명령 줄에서 django-admin.py arg1 arg2 ...을 실행할 수 있습니다.

+0

osx에서 이것은/opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin'에있는 PATH에없는 스크립트를 넣는 것처럼 보입니다. – qed

0

일반적인 방법은 스크립트로 실행하려는 모듈을 사용자의 PATH에있는 /usr/local/bin과 같은 위치에 배치하는 것입니다. 인터프리터를 지정하지 않고 스크립트를 호출 할 수 있도록 shebang 행을 포함 시키면 정상이어야합니다.

+0

그러나 사용자가 패키지를 설치하면 사이트 패키지에 들어갑니다. 그래서 /some/path/site-packages/mypackage/submodule1.py가 될 것입니다./usr/local/bin에 스크립트를 표시하려면 어떻게합니까? 설치 과정에서 사용자가 직접 복사해야합니까? 그게 어색해 보인다 – user248237dfsf