python पाइथन मॉड्यूल/पैकेज कैसे लिखें?




python-2.7 python-module (5)

"Hello.py" नाम की एक फ़ाइल बनाएं

यदि आप पायथन 2.x का उपयोग कर रहे हैं

def func():
    print "Hello"

यदि आप पायथन 3.x का उपयोग कर रहे हैं

def func():
    print("Hello")

फ़ाइल चलाएं। फिर, आप निम्न कोशिश कर सकते हैं:

>>> import hello
>>> hello.func()
Hello

यदि आप थोड़ा मुश्किल चाहते हैं, तो आप निम्न का उपयोग कर सकते हैं:

यदि आप पायथन 2.x का उपयोग कर रहे हैं

def say(text):
    print text

यदि आप पायथन 3.x का उपयोग कर रहे हैं

def say(text):
    print(text)

परिभाषित करने के बगल में कोष्ठक पर एक देखें? यह महत्वपूर्ण है। यह वह है जिसे आप परिभाषित करने के भीतर उपयोग कर सकते हैं।

पाठ - जब आप प्रोग्राम को यह कहना चाहते हैं कि आप क्या चाहते हैं तो आप इसका उपयोग कर सकते हैं। इसके नाम के अनुसार, यह पाठ है। मुझे उम्मीद है कि आप जानते हैं कि पाठ का क्या अर्थ है। इसका मतलब है "शब्द" या "वाक्यों"।

फ़ाइल चलाएं। फिर, यदि आप पाइथन 3.x का उपयोग कर रहे हैं तो आप निम्न का प्रयास कर सकते हैं:

>>> import hello
>>> hello.say("hi")
hi
>>> from hello import say
>>> say("test")
test

पायथन 2.x के लिए - मुझे लगता है कि पाइथन 3 के साथ एक ही चीज़ है? कोई जानकारी नहीं। अगर मैंने पायथन 2.x पर गलती की है तो मुझे सही करें (मुझे पाइथन 2 पता है लेकिन मुझे पायथन 3 के साथ उपयोग किया जाता है)

https://code.i-harness.com

मैं काम पर सरल कार्यों के लिए पाइथन स्क्रिप्ट बना रहा हूं और दूसरों को उपयोग करने के लिए उन्हें वास्तव में परेशान नहीं किया। अब मुझे एक आरईएसटी एपीआई के लिए पाइथन रैपर बनाने के लिए असाइन किया गया है। मुझे बिल्कुल शुरू नहीं है कि कैसे शुरू करना है और मुझे मदद चाहिए।

जो मेरे पास है:

(बस जितना संभव हो सके विशिष्ट होना चाहते हैं) मेरे पास virtualenv तैयार है, यह भी गिटूब में है , python के लिए .gitignore फ़ाइल भी है, साथ ही, REST API के साथ इंटरैक्ट करने के लिए अनुरोध लाइब्रेरी है। बस।

वर्तमान निर्देशिका पेड़ यहाँ है

.
├── bin
│   └── /the usual stuff/
├── include
│   └── /the usual stuff/
├── lib
│   └── python2.7
│       └── /the usual stuff/
├── local
│   └── /the usual stuff/
└── README.md

27 directories, 280 files

मैं यह भी नहीं जानता कि .py फ़ाइलों को कहां रखा जाए, अगर मैंने कभी एक बना दिया है।

मैं क्या करना चाहता था:

"पाइप इंस्टॉल ..." के साथ एक पायथन मॉड्यूल स्थापित-सक्षम करें

यदि संभव हो, तो मैं पायथन मॉड्यूल लिखने पर चरणबद्ध प्रक्रिया द्वारा एक सामान्य कदम चाहता हूं।


एक बार जब आप अपने चुने हुए आदेशों को परिभाषित कर लेंगे, तो आप सहेजी गई फ़ाइल को अपने पायथन प्रोग्राम फ़ाइलों में लिब फ़ोल्डर में खींच और छोड़ सकते हैं।

>>> import mymodule 
>>> mymodule.myfunc()

एक मॉड्यूल एक फ़ाइल है जिसमें पायथन परिभाषाएं और बयान शामिल हैं। फ़ाइल नाम प्रत्यय .py साथ मॉड्यूल नाम है

hello.py बनाएं, फिर निम्न कार्य को इसकी सामग्री के रूप में लिखें:

def helloworld():
   print "hello"

फिर आप hello आयात कर सकते हैं:

>>> import hello
>>> hello.helloworld()
'hello'
>>>

कई .py फ़ाइलों को समूहित करने के लिए उन्हें एक फ़ोल्डर में डाल दिया। __init__.py किसी भी फ़ोल्डर को पाइथन द्वारा मॉड्यूल माना जाता है और आप उन्हें एक पैकेज कह सकते हैं

|-HelloModule
  |_ __init__.py
  |_ hellomodule.py

आप सामान्य रूप से अपने मॉड्यूल पर आयात विवरण के साथ जा सकते हैं।

अधिक जानकारी के लिए, 6.4 देखें पैकेज


चूंकि किसी ने अभी तक ओपी के इस सवाल को कवर नहीं किया है:

मैं क्या करना चाहता था:

"पाइप इंस्टॉल ..." के साथ एक पायथन मॉड्यूल स्थापित-सक्षम करें

यहां एक पूर्ण न्यूनतम उदाहरण है, जो सेटअप setuptools और जुड़वां का उपयोग करके setuptools को अपने पैकेज को तैयार करने और अपलोड करने के बुनियादी कदम दिखा रहा है।

यह कम से कम ट्यूटोरियल पढ़ने के लिए कोई विकल्प नहीं है, इस मूलभूत उदाहरण में शामिल होने से कहीं अधिक है।

पैकेज को स्वयं बनाना पहले से ही अन्य उत्तरों से ढका हुआ है, इसलिए आइए मान लें कि हमारे पास उस चरण को शामिल किया गया है और हमारी परियोजना संरचना इस प्रकार है:

.
└── hello/
    ├── __init__.py
    └── hello.py

पैकेजिंग के लिए setuptools का उपयोग करने के लिए, हमें एक फ़ाइल setup.py जोड़ने की जरूरत है, यह हमारी परियोजना के रूट फ़ोल्डर में जाता है:

.
├── setup.py
└── hello/
    ├── __init__.py
    └── hello.py

कम से कम, हम अपने पैकेज के लिए मेटाडेटा निर्दिष्ट करते हैं, हमारा setup.py इस तरह दिखेगा:

from setuptools import setup

setup(
    name='hello',
    version='0.0.1',
    description='a pip-installable package example',
    license='MIT',
    packages=['hello'],
    author='Benjamin Gerfelder',
    author_email='[email protected]',
    keywords=['example'],
    url='https://github.com/bgse/hello'
)

चूंकि हमने license='MIT' सेट license='MIT' , इसलिए हमने अपनी परियोजना में एक प्रतिलिपि LICENCE.txt के रूप में, रीडक्चरर्ड टेक्स्ट में रीडेमे फ़ाइल के साथ README.rst रूप में शामिल की है:

.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hello/
    ├── __init__.py
    └── hello.py

इस बिंदु पर, हम setuptools का उपयोग करके पैकेजिंग शुरू करने के लिए तैयार हैं, अगर हमने इसे पहले से इंस्टॉल नहीं किया है, तो हम इसे pip इंस्टॉल कर सकते हैं:

pip install setuptools

ऐसा करने के लिए और source distribution बनाने के लिए, हमारे प्रोजेक्ट रूट फ़ोल्डर पर हम कमांड लाइन से हमारे setup.py को कॉल करते हैं, यह निर्दिष्ट करते हुए कि हम sdist चाहते हैं:

python setup.py sdist

यह हमारे वितरण पैकेज और अंडे की जानकारी बनाएगा, और परिणामस्वरूप हमारे फ़ोल्डर के साथ इस तरह की फ़ोल्डर संरचना में:

.
├── dist/
├── hello.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hello/
    ├── __init__.py
    └── hello.py

इस बिंदु पर, हमारे पास एक पैकेज है जिसे हम pip का उपयोग करके इंस्टॉल कर सकते हैं, इसलिए हमारी परियोजना रूट से (मान लीजिए कि आपके पास इस उदाहरण में सभी नामकरण हैं):

pip install ./dist/hello-0.0.1.tar.gz

अगर सब ठीक हो जाए, तो अब हम पाइथन दुभाषिया खोल सकते हैं, मैं किसी भी भ्रम से बचने के लिए हमारी परियोजना निर्देशिका के बाहर कहीं कहूंगा, और हमारे चमकदार नए पैकेज का उपयोग करने की कोशिश करता हूं:

Python 3.5.2 (default, Sep 14 2017, 22:51:06) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hello import hello
>>> hello.greeting()
'Hello !'

अब जब हमने पैकेज इंस्टॉल और काम की पुष्टि की है, तो हम इसे पीपीपीआई पर अपलोड कर सकते हैं।

चूंकि हम अपने प्रयोगों के साथ लाइव रिपोजिटरी को प्रदूषित नहीं करना चाहते हैं, इसलिए हम परीक्षण भंडार के लिए एक खाता बनाते हैं, और अपलोड प्रक्रिया के लिए twine स्थापित करते हैं:

pip install twine

अब हम लगभग वहां हैं, हमारे खाते के निर्माण के साथ हम अपने पैकेज को अपलोड करने के लिए बस twine , यह हमारे प्रमाण पत्र मांगेगा और हमारे पैकेज को निर्दिष्ट भंडार में अपलोड करेगा:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

अब हम पीईपीआई परीक्षण भंडार पर हमारे खाते में लॉग इन कर सकते हैं और थोड़ी देर के लिए हमारे ताजा अपलोड किए गए पैकेज पर आश्चर्यचकित हो सकते हैं, और फिर इसे pip का उपयोग करके पकड़ सकते हैं:

pip install --index-url https://test.pypi.org/simple/ hello

जैसा कि हम देख सकते हैं, मूल प्रक्रिया बहुत जटिल नहीं है। जैसा कि मैंने पहले कहा था, यहां कवर करने से कहीं अधिक कुछ है, इसलिए आगे बढ़ें और अधिक गहराई से स्पष्टीकरण के लिए ट्यूटोरियल पढ़ें


पायथन 3 - 18 नवंबर 2015 को अपडेट किया गया

स्वीकार किए गए उत्तर को उपयोगी पाया, फिर भी अपने अनुभवों के आधार पर दूसरों के लाभ के लिए कई बिंदुओं पर विस्तार करना चाहता था।

मॉड्यूल: एक मॉड्यूल एक फ़ाइल है जिसमें पायथन परिभाषाएं और बयान शामिल हैं। फ़ाइल नाम प्रत्यय .py संलग्न के साथ मॉड्यूल नाम है।

मॉड्यूल उदाहरण : मान लें कि हमारे पास वर्तमान निर्देशिका में एक पाइथन स्क्रिप्ट है, यहां मैं इसे mymodule.py कह रहा हूं

फ़ाइल mymodule.py में निम्न कोड है:

def myfunc():
    print("Hello!")

यदि हम वर्तमान निर्देशिका से पायथन 3 दुभाषिया चलाते हैं, तो हम निम्नलिखित my तरीकों से फ़ंक्शन myfunc को आयात और चला सकते हैं (आप आमतौर पर केवल निम्न में से कोई एक चुनते हैं):

>>> import mymodule
>>> mymodule.myfunc()
Hello!
>>> from mymodule import myfunc
>>> myfunc()
Hello!
>>> from mymodule import *
>>> myfunc()
Hello!

ठीक है, तो यह काफी आसान था।

अब मान लें कि इस मॉड्यूल को मॉड्यूल नेमस्पेस प्रदान करने के लिए अपने मॉड्यूल को अपने समर्पित फ़ोल्डर में रखने की आवश्यकता है, बजाय वर्तमान कार्य निर्देशिका से इसे विज्ञापन-स्थान चलाने की बजाय। यह वह जगह है जहां पैकेज की अवधारणा को समझाने लायक है।

पैकेज : पैकेज "बिंदीदार मॉड्यूल नाम" का उपयोग करके पायथन के मॉड्यूल नेमस्पेस को संरचित करने का एक तरीका है। उदाहरण के लिए, मॉड्यूल नाम एबी नामक पैकेज में बी नामक एक सबमिशन को निर्दिष्ट करता है। मॉड्यूल के उपयोग की तरह ही विभिन्न मॉड्यूल के लेखकों को एक दूसरे के वैश्विक चर नामों के बारे में चिंता करने से बचाता है, बिंदीदार मॉड्यूल नामों का उपयोग लेखकों को बचाता है बहु-मॉड्यूल पैकेज जैसे न्यूमपी या पायथन इमेजिंग लाइब्रेरी के एक दूसरे के मॉड्यूल नामों के बारे में चिंता करने से।

पैकेज उदाहरण : आइए अब मान लें कि हमारे पास निम्न फ़ोल्डर और फ़ाइलें हैं। यहां, mymodule.py पहले जैसा है, और __init__.py एक खाली फ़ाइल है:

.
└── mypackage
    ├── __init__.py
    └── mymodule.py

__init__.py फ़ाइलों को पाइथन को निर्देशिका वाले संकुल के रूप में उपयोग करने की आवश्यकता होती है। अधिक जानकारी के लिए, कृपया बाद में प्रदान किए गए मॉड्यूल दस्तावेज़ दस्तावेज़ देखें।

हमारी वर्तमान कार्यशील निर्देशिका Mypackage नामक सामान्य फ़ोल्डर से एक स्तर है

$ ls
mypackage

अगर हम अब python3 दुभाषिया चलाते हैं, तो हम मॉड्यूल mymodule.py को आयात और चला सकते हैं जिसमें आवश्यक फ़ंक्शन myfunc निम्नलिखित विभिन्न तरीकों से है (आप आमतौर पर केवल निम्न में से कोई एक चुनते हैं):

>>> import mypackage
>>> from mypackage import mymodule
>>> mymodule.myfunc()
Hello!
>>> import mypackage.mymodule
>>> mypackage.mymodule.myfunc()
Hello!
>>> from mypackage import mymodule
>>> mymodule.myfunc()
Hello!
>>> from mypackage.mymodule import myfunc
>>> myfunc()
Hello!
>>> from mypackage.mymodule import *
>>> myfunc()
Hello!

पाइथन 3 मानते हुए, Modules पर उत्कृष्ट दस्तावेज है

पैकेज और मॉड्यूल के लिए नामकरण सम्मेलनों के संदर्भ में, सामान्य दिशानिर्देश पीईपी-0008 में दिए गए हैं - कृपया पैकेज और मॉड्यूल नाम देखें

मॉड्यूल में छोटे, सभी-लोअरकेस नाम होना चाहिए। अंडरस्कोर मॉड्यूल नाम में इस्तेमाल किया जा सकता है अगर यह पठनीयता में सुधार करता है। पायथन पैकेज में शॉर्ट, ऑल-लोअरकेस नाम भी होना चाहिए, हालांकि अंडरस्कोर का उपयोग निराश होता है।





python-module