खोज…


वाक्य - विन्यास

  • आयात मॉड्यूल_नाम
  • आयात मॉड्यूल_नाम.सुबमोडुले_नाम
  • मॉड्यूल_नाम आयात से *
  • मॉड्यूल_नाम आयात से 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

प्रोग्रामेटिक आयात

पायथन 2.x 2.7

एक फ़ंक्शन कॉल के माध्यम से एक मॉड्यूल आयात करने के लिए, importlib मॉड्यूल (संस्करण 2.7 में शुरू पायथन में शामिल) का उपयोग करें:

import importlib
random = importlib.import_module("random")

importlib.import_module() फ़ंक्शन भी सीधे पैकेज के importlib.import_module() आयात करेगा:

collections_abc = importlib.import_module("collections.abc")

पायथन के पुराने संस्करणों के लिए, imp मॉड्यूल का उपयोग करें।

पायथन 2.x 2.7

प्रोग्रामेटिक आयात करने के लिए 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 शैली दिशानिर्देश आयात के लिए:

  1. आयात अलग लाइनों पर होना चाहिए:

     from math import sqrt, ceil      # Not recommended
     from math import sqrt            # Recommended
     from math import ceil
    
  1. मॉड्यूल के शीर्ष पर निम्नानुसार ऑर्डर आयात करें:

    • मानक पुस्तकालय आयात
    • संबंधित तृतीय पक्ष आयात
    • स्थानीय अनुप्रयोग / पुस्तकालय विशिष्ट आयात
  2. वाइल्डकार्ड आयात से बचा जाना चाहिए क्योंकि इससे वर्तमान नामस्थान में नामों में भ्रम पैदा होता है। यदि आप from module import * , तो यह स्पष्ट नहीं हो सकता है कि आपके कोड में एक विशिष्ट नाम module से आता है या नहीं। यह दोगुना सच है यदि आपके पास from module import * -कथन from module import * कई हैं।

  3. रिश्तेदार आयात का उपयोग करने से बचें; इसके बजाय स्पष्ट आयात का उपयोग करें।

सबमॉड्यूल आयात करना

from module.submodule import function

इस module.submodule से आयात functionmodule.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 फ़ंक्शन का उपयोग करें:

पायथन 2.x 2.3
import math
math.pi = 3
print(math.pi)    # 3
reload(math)
print(math.pi)    # 3.141592653589793

अजगर ३


reload फ़ंक्शन importlib करने के लिए स्थानांतरित हो importlib :

अजगर 3.x 3.0
import math
math.pi = 3
print(math.pi)    # 3
from importlib import reload
reload(math)
print(math.pi)    # 3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow