Python Language
आयात करने वाले मॉड्यूल
खोज…
वाक्य - विन्यास
- आयात मॉड्यूल_नाम
- आयात मॉड्यूल_नाम.सुबमोडुले_नाम
- मॉड्यूल_नाम आयात से *
- मॉड्यूल_नाम आयात से submodule_name [, class_name , function_name , ... आदि]
- NEW_NAME रूप MODULE_NAME आयात some_name से
- मॉड्यूल_नाम.सुमोदुले_नाम से आयात class_name [, function_name , ... आदि]
टिप्पणियों
एक मॉड्यूल को आयात करने से पायथन इस मॉड्यूल में सभी शीर्ष-स्तरीय कोड का मूल्यांकन करेगा ताकि यह मॉड्यूल के सभी कार्यों, वर्गों और चर को सीख ले । जब आप चाहते हैं कि आपका एक मॉड्यूल कहीं और आयात किया जाए, तो अपने शीर्ष-स्तरीय कोड से सावधान रहें, और इसे if __name__ == '__main__':
यदि आप नहीं चाहते हैं कि मॉड्यूल आयात होने पर इसे निष्पादित किया जाए।
एक मॉड्यूल आयात करना
import
विवरण का उपयोग करें:
>>> import random
>>> print(random.randint(1, 10))
4
import module
एक मॉड्यूल आयात करेगा और फिर आपको इसकी वस्तुओं - मूल्यों, कार्यों और कक्षाओं को संदर्भित करने की अनुमति देगा, उदाहरण के लिए - module.name
का उपयोग करके। सिंटैक्स। उपरोक्त उदाहरण में, random
मॉड्यूल आयात किया जाता है, जिसमें randint
फ़ंक्शन होता है। आयात करके तो random
आप कॉल कर सकते हैं randint
साथ random.randint
।
आप एक मॉड्यूल आयात कर सकते हैं और इसे एक अलग नाम पर असाइन कर सकते हैं:
>>> import random as rn
>>> print(rn.randint(1, 10))
4
अपने अजगर फ़ाइल तो main.py
को उसी फ़ोल्डर में है custom.py
। आप इसे इस तरह से आयात कर सकते हैं:
import custom
मॉड्यूल से फ़ंक्शन आयात करना भी संभव है:
>>> from math import sin
>>> sin(1)
0.8414709848078965
विशिष्ट कार्यों को एक मॉड्यूल में गहराई से आयात करने के लिए, डॉट ऑपरेटर का उपयोग केवल import
कीवर्ड के बाईं ओर किया जा सकता है:
from urllib.request import urlopen
अजगर में, हमारे पास शीर्ष स्तर से फ़ंक्शन को कॉल करने के दो तरीके हैं। एक यह है import
और एक अन्य है from
। जब हम नाम की टक्कर की संभावना रखते हैं तो हमें import
उपयोग करना चाहिए। मान लें कि हमारे पास hello.py
फ़ाइल और world.py
फाइलें हैं जिनमें समान फ़ंक्शन नाम का function
। फिर import
बयान अच्छा काम करेगा।
from hello import function
from world import function
function() #world's function will be invoked. Not hello's
सामान्य import
आप एक नाम स्थान प्रदान करेंगे।
import hello
import world
hello.function() # exclusively hello's function will be invoked
world.function() # exclusively world's function will be invoked
लेकिन अगर आपको पूरा यकीन है, तो आपके पूरे प्रोजेक्ट में एक ही तरह का फ़ंक्शन नाम नहीं है, जिसे आपको स्टेटमेंट from
इस्तेमाल करना चाहिए
एक ही लाइन पर कई आयात किए जा सकते हैं:
>>> # Multiple modules
>>> import time, sockets, random
>>> # Multiple functions
>>> from math import sin, cos, tan
>>> # Multiple constants
>>> from math import pi, e
>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417
ऊपर दिखाए गए कीवर्ड और सिंटैक्स का उपयोग संयोजनों में भी किया जा सकता है:
>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random.randint, time, sys
>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/dogs/jumping poodle (december).png"
>>> print(path2url(filepath))
/dogs/jumping%20poodle%20%28december%29.png
किसी मॉड्यूल से विशिष्ट नाम आयात करना
पूरा मॉड्यूल आयात करने के बजाय आप केवल निर्दिष्ट नाम आयात कर सकते हैं:
from random import randint # Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"
print(randint(1, 10)) # Out: 5
from random
की आवश्यकता है, क्योंकि अजगर दुभाषिया को यह जानना होता है कि उसे किस संसाधन से किसी फ़ंक्शन या वर्ग को आयात करना चाहिए और import randint
फ़ंक्शन या वर्ग को निर्दिष्ट करता है।
नीचे एक और उदाहरण (ऊपर वाले के समान):
from math import pi
print(pi) # Out: 3.14159265359
निम्न उदाहरण एक त्रुटि उत्पन्न करेगा, क्योंकि हमने एक मॉड्यूल आयात नहीं किया है:
random.randrange(1, 10) # works only if "import random" has been run before
आउटपुट:
NameError: name 'random' is not defined
अजगर दुभाषिया समझ में नहीं आता कि आप random
साथ क्या मतलब है। इसे उदाहरण में import random
जोड़कर घोषित किया जाना चाहिए:
import random
random.randrange(1, 10)
एक मॉड्यूल से सभी नाम आयात करना
from module_name import *
उदाहरण के लिए:
from math import *
sqrt(2) # instead of math.sqrt(2)
ceil(2.7) # instead of math.ceil(2.7)
यह math
मॉड्यूल में परिभाषित सभी नामों को वैश्विक नाम स्थान में आयात करेगा, अन्य नामों के अलावा जो अंडरस्कोर से शुरू होते हैं (जो इंगित करता है कि लेखक को लगता है कि यह केवल आंतरिक उपयोग के लिए है)।
चेतावनी : यदि समान नाम वाला कोई फ़ंक्शन पहले से परिभाषित या आयात किया गया था, तो इसे ओवरराइट कर दिया जाएगा। लगभग हमेशा from math import sqrt, ceil
केवल विशिष्ट नाम from math import sqrt, ceil
अनुशंसित तरीका है :
def sqrt(num):
print("I don't know what's the square root of {}.".format(num))
sqrt(4)
# Output: I don't know what's the square root of 4.
from math import *
sqrt(4)
# Output: 2.0
मॉड्यूल स्तर पर केवल तारांकित आयात की अनुमति है। उन्हें कक्षा या फ़ंक्शन परिभाषाओं में निष्पादित करने का प्रयास एक SyntaxError
।
def f():
from math import *
तथा
class A:
from math import *
दोनों विफल:
SyntaxError: import * only allowed at module level
__All__ विशेष चर
from mymodule import *
उपयोग करने पर चर को आयात करने के लिए मॉड्यूल का एक विशेष चर __all__
हो सकता है।
निम्नलिखित मॉड्यूल को देखते हुए:
# mymodule.py
__all__ = ['imported_by_star']
imported_by_star = 42
not_imported_by_star = 21
केवल imported_by_star
आयात किया जाता है का उपयोग करते समय from mymodule import *
:
>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'not_imported_by_star' is not defined
हालाँकि, not_imported_by_star
को स्पष्ट रूप से आयात किया जा सकता है:
>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21
प्रोग्रामेटिक आयात
एक फ़ंक्शन कॉल के माध्यम से एक मॉड्यूल आयात करने के लिए, importlib
मॉड्यूल (संस्करण 2.7 में शुरू पायथन में शामिल) का उपयोग करें:
import importlib
random = importlib.import_module("random")
importlib.import_module()
फ़ंक्शन भी सीधे पैकेज के importlib.import_module()
आयात करेगा:
collections_abc = importlib.import_module("collections.abc")
पायथन के पुराने संस्करणों के लिए, imp
मॉड्यूल का उपयोग करें।
प्रोग्रामेटिक आयात करने के लिए imp.find_module
और imp.load_module
फ़ंक्शन का उपयोग करें।
मानक पुस्तकालय प्रलेखन से लिया गया
import imp, sys
def import_module(name):
fp, pathname, description = imp.find_module(name)
try:
return imp.load_module(name, fp, pathname, description)
finally:
if fp:
fp.close()
प्रोग्राम आयात मॉड्यूल के लिए __import__()
का उपयोग न करें! इसमें sys.modules
, fromlist
वाद, इत्यादि से संबंधित सूक्ष्म विवरण हैं जो यह अनदेखी करना आसान है कि कौन सा importlib.import_module()
आपके लिए संभालता है।
एक मनमाना फाइल सिस्टम स्थान से मॉड्यूल आयात करें
यदि आप एक ऐसे मॉड्यूल को आयात करना चाहते हैं जो पहले से ही पाइथन स्टैंडर्ड लाइब्रेरी में न तो बिल्ट-इन मॉड्यूल के रूप में मौजूद है और न ही एक साइड-पैकेज के रूप में, आप निर्देशिका में उस पथ को जोड़कर ऐसा कर सकते हैं जहां आपका मॉड्यूल sys.path
को मिला है sys.path
। यह उपयोगी हो सकता है जहां एक मेजबान पर कई अजगर वातावरण मौजूद हैं।
import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule
यह महत्वपूर्ण है कि आप उस निर्देशिका के लिए पथ संलग्न करें जिसमें mymodule
पाया जाता है, न कि मॉड्यूल के लिए पथ।
PEP8 आयात के लिए नियम
कुछ अनुशंसित PEP8 शैली दिशानिर्देश आयात के लिए:
आयात अलग लाइनों पर होना चाहिए:
from math import sqrt, ceil # Not recommended from math import sqrt # Recommended from math import ceil
मॉड्यूल के शीर्ष पर निम्नानुसार ऑर्डर आयात करें:
- मानक पुस्तकालय आयात
- संबंधित तृतीय पक्ष आयात
- स्थानीय अनुप्रयोग / पुस्तकालय विशिष्ट आयात
वाइल्डकार्ड आयात से बचा जाना चाहिए क्योंकि इससे वर्तमान नामस्थान में नामों में भ्रम पैदा होता है। यदि आप
from module import *
, तो यह स्पष्ट नहीं हो सकता है कि आपके कोड में एक विशिष्ट नामmodule
से आता है या नहीं। यह दोगुना सच है यदि आपके पासfrom module import *
-कथनfrom module import *
कई हैं।रिश्तेदार आयात का उपयोग करने से बचें; इसके बजाय स्पष्ट आयात का उपयोग करें।
सबमॉड्यूल आयात करना
from module.submodule import function
इस module.submodule
से आयात function
। module.submodule
।
__import __ () फ़ंक्शन
__import__()
फ़ंक्शन का उपयोग उन मॉड्यूल को आयात करने के लिए किया जा सकता है जहां नाम केवल रनटाइम पर जाना जाता है
if user_input == "os":
os = __import__("os")
# equivalent to import os
इस फ़ंक्शन का उपयोग किसी मॉड्यूल में फ़ाइल पथ को निर्दिष्ट करने के लिए भी किया जा सकता है
mod = __import__(r"C:/path/to/file/anywhere/on/computer/module.py")
एक मॉड्यूल को फिर से आयात करना
इंटरैक्टिव दुभाषिया का उपयोग करते समय, आप एक मॉड्यूल को फिर से लोड करना चाह सकते हैं। यह उपयोगी हो सकता है यदि आप एक मॉड्यूल का संपादन कर रहे हैं और नवीनतम संस्करण आयात करना चाहते हैं, या यदि आपने एक मौजूदा मॉड्यूल के एक तत्व को बंदर-पैच किया है और अपने परिवर्तनों को वापस करना चाहते हैं।
ध्यान दें कि आप मॉड्यूल को फिर से वापस लाने के लिए import
नहीं कर सकते हैं :
import math
math.pi = 3
print(math.pi) # 3
import math
print(math.pi) # 3
ऐसा इसलिए है क्योंकि दुभाषिया आपके द्वारा आयात किए जाने वाले प्रत्येक मॉड्यूल को पंजीकृत करता है। और जब आप किसी मॉड्यूल को फिर से खोलने की कोशिश करते हैं, तो दुभाषिया इसे रजिस्टर में देखता है और कुछ भी नहीं करता है। तो रजिस्टर से संबंधित आइटम को हटाने के बाद import
का उपयोग करने का कठिन तरीका है:
print(math.pi) # 3
import sys
if 'math' in sys.modules: # Is the ``math`` module in the register?
del sys.modules['math'] # If so, remove it.
import math
print(math.pi) # 3.141592653589793
लेकिन एक सीधा और सरल तरीका है।
अजगर २
reload
फ़ंक्शन का उपयोग करें:
import math
math.pi = 3
print(math.pi) # 3
reload(math)
print(math.pi) # 3.141592653589793
अजगर ३
reload
फ़ंक्शन importlib
करने के लिए स्थानांतरित हो importlib
:
import math
math.pi = 3
print(math.pi) # 3
from importlib import reload
reload(math)
print(math.pi) # 3.141592653589793