2015-01-05 3 views
12

필자는 좋은 Pythonista가 되려고 노력 중이며 배포를 계획중인 패키지에 대해서는 PEP 338을 따르고 있습니다.setuptools를 사용하여`python -m mypackage`를 호출하는 console_scripts 진입 점을 생성하는 방법은 무엇입니까?

나는 또한 python setuptools install setuptools entry_points{'console_scripts': ... } 옵션을 사용하여 내 실행 스크립트를 생성하려고합니다.

어떻게 python -m mypackage를 호출하는 바이너리 (* 인수 및 전달, ** kwargs로)를 생성하는 entry_points를 사용할 수 있습니까? 여기

내가 성공하지 만든 몇 가지 시도입니다

setuptools(
... 

(1)

entry_points= 
     {'console_scripts': ['mypkg=mypkg.__main__'],}, 

(2)

entry_points= 
     {'console_scripts': ['mypkg=mypkg.main'],}, 

(3)

entry_points= 
     {'console_scripts': ['mypkg=python -m mypkg'],}, 
내가 사용하고개

주요 자원 :

답변

15

어떻게 파이썬 -m를 호출하는 바이너리를 생성하는 entry_points을 사용할 수 있습니다 mypackage (그리고 패스 * args, ** kwargs)?

나는이 문제를 볼 수있는 잘못된 방법이라고 생각합니다. 당신은 당신의 스크립트가 python -m mypackage를 호출하고 싶지 않아,하지만 당신은 python -m mypackage

이 간단한 예를 고려할 때 스크립트가 같은 엔트리 포인트를 갖고 싶어 :

script_proj/ 
├── script_proj 
│   ├── __init__.py 
│   └── __main__.py 
└── setup.py 

과 최소한의 setup.py :

from setuptools import setup 

setup(
    name="script_proj", 
    packages=["script_proj"], 
    entry_points = { 
     "console_scripts": [ 
      "myscript = script_proj.__main__:main", 
     ] 
    } 
) 

__main__.py는 더미 모듈이며 main 방법을 포함한다.

def main(): 
    print("Hello world!") 

if __name__ == "__main__": 
    main() 

는 설치 한 후 __main__.py에서 main 메소드를 호출 실행 myscript을 보유하고 있습니다. 이 패키지 디자인에서 python -m script_proj도 동일한 main 메서드를 호출합니다.

+0

이 기능은 나를 위해 작동하지만'myscript'를 호출하면 main() 함수가 두 번 호출됩니다. 내 주요 함수는'print ("Success!")'문만 포함하고 출력을 두 번 얻는다. – ben

+0

이것을 덧붙이면,'python -m script_proj'를 호출하면 오직 하나의 출력 – ben

+0

@ rm-rf_ 만 생성됩니다. 'myscript'는'python -m script_proj'와 똑같이'Hello world! '만을 출력합니다 ...hmm – cel