2015-01-05 8 views
12

Ich versuche, eine gute Pythonista zu sein und folgende PEP 338 für mein Paket, das ich auf der Bereitstellung planen.Wie kann ich mit setuptools einen console_scripts-Einstiegspunkt erzeugen, der `python -m meinpaket` aufruft?

Ich versuche auch, meine ausführbaren Skripte auf python setuptools install mit setuptools entry_points{'console_scripts': ... } Optionen zu generieren.

Wie kann ich entry_points verwenden, um eine Binärdatei zu generieren, die python -m mypackage aufruft (und * args, ** kwargs)?

Hier sind ein paar Versuche, die ich ohne Erfolg gemacht haben:

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'],}, 

Primäre Ressourcen Ich habe mit:

Antwort

15

Wie kann ich entry_points verwenden, um eine binäre zu erzeugen, die Python -m ruft MeinPaket (und geht * Args, ** Kwargs)?

Ich denke, das ist der falsche Weg, um das Problem zu betrachten. Sie wollen nicht Ihr Skript python -m mypackage nennen, aber Sie wollen das Skript den gleichen Einstiegspunkt haben, wie python -m mypackage

dieses einfache Beispiel betrachten:

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

und das minimalistische setup.py:

from setuptools import setup 

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

__main__.py ist ein Dummy-Modul und enthält die main-Methode.

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

if __name__ == "__main__": 
    main() 

Nach der Installation haben Sie die ausführbare myscript, die die main Methode in __main__.py aufruft. In diesem Paket Design python -m script_proj ruft auch die gleiche main Methode.

+0

Das funktioniert für mich, aber beim Aufruf von 'myscript' wird meine main() -Funktion zweimal aufgerufen. Meine Hauptfunktion enthält nur eine 'print (" Success! ") Anweisung, und ich bekomme die Ausgabe zweimal. – ben

+0

Um hinzuzufügen, wird der Aufruf von 'python -m script_proj' nur 1 Ausgabe – ben

+0

@ rm-rf_ erzeugen, es scheint für mich zu funktionieren. 'myscript' druckt dasselbe wie' python -m script_proj' nur eine 'Hallo Welt!' ...hmm – cel

Verwandte Themen