2015-01-05 2 views
12

मैं अपने पैकेज के लिए एक अच्छा पायथनिस्टा और PEP 338 का पालन करने की कोशिश कर रहा हूं, मैं तैनाती पर योजना बना रहा हूं।मैं कंसोल_स्क्रिप्ट प्रविष्टि बिंदु उत्पन्न करने के लिए setuptools का उपयोग कैसे कर सकता हूं जो `python -m mypackage` कहता है?

मैं setuptools entry_points{'console_scripts': ... } विकल्पों का उपयोग करके python setuptools install पर अपनी निष्पादन योग्य स्क्रिप्ट उत्पन्न करने का भी प्रयास कर रहा हूं।

python -m mypackage (और पास * args, ** kwargs) कहने वाली बाइनरी उत्पन्न करने के लिए मैं एंट्री पॉइंट्स का उपयोग कैसे कर सकता हूं?

यहाँ कुछ प्रयास मुझे कोई सफलता के साथ बना दिया है:

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

मैं entry_points का उपयोग कैसे एक द्विआधारी कि अजगर -m कॉल उत्पन्न करने के लिए कर सकते हैं Mypackage (और पास * args, ** kwargs)?

मुझे लगता है कि समस्या को देखने का यह गलत तरीका है। आपके पास अपनी स्क्रिप्ट python -m mypackage कॉल करने के लिए नहीं करना चाहते हैं, लेकिन आप स्क्रिप्ट एक ही प्रवेश बिंदु के लिए के रूप में python -m mypackage

इस सरल उदाहरण पर विचार करना चाहते हैं:

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

और minimalistic 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() 

स्थापित करने के बाद, आप निष्पादन योग्य myscript, जो __main__.py में main प्रणाली को बुलाती है। इस पैकेज में डिज़ाइन python -m script_proj भी main विधि को कॉल करता है।

+0

यह मेरे लिए काम करता है, हालांकि 'myscript' को कॉल करते समय, मेरा मुख्य() फ़ंक्शन दो बार कहा जाता है। मेरे मुख्य कार्य में केवल 'प्रिंट ("सफलता!")' कथन शामिल है, और मुझे आउटपुट दो बार मिलता है। – ben

+0

इसमें जोड़ने के लिए, 'python -m script_proj' को कॉल करने से केवल 1 आउटपुट – ben

+0

@ rm-rf_ उत्पन्न होगा, ऐसा लगता है कि यह मेरे लिए काम करता है। 'myscript' प्रिंट करता है 'python -m script_proj' केवल एक' हैलो वर्ल्ड! '...हम्म – cel

संबंधित मुद्दे

 संबंधित मुद्दे