अन्य फ़ाइलों में उपयोग करने के लिए बाहरी पायथन कोड कैसे शामिल करें?


117

यदि आपके पास किसी फ़ाइल में विधियों का संग्रह है, तो क्या उन फ़ाइलों को किसी अन्य फ़ाइल में शामिल करने का कोई तरीका है, लेकिन उन्हें बिना किसी उपसर्ग (यानी फ़ाइल उपसर्ग) के कॉल करें?

तो अगर मेरे पास है:

[Math.py]
def Calculate ( num )

मैं इसे इस तरह कैसे कह सकता हूं:

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )

जवाबों:


154

आपको एक मॉड्यूल के रूप में अन्य फ़ाइल को इस तरह आयात करना होगा:

import Math

यदि आप Calculateमॉड्यूल फ़ंक्शन के साथ अपने फ़ंक्शन को उपसर्ग नहीं करना चाहते हैं, तो ऐसा करें:

from Math import Calculate

यदि आप किसी मॉड्यूल के सभी सदस्यों को आयात करना चाहते हैं तो ऐसा करें:

from Math import *

संपादित करें: यहां डाइव इन पाइथन का एक अच्छा अध्याय है जो इस विषय पर गहराई से थोड़ा और आगे बढ़ता है।


9
टिप्पण लायक है कि from Math import *है की सलाह नहीं दी ।
— n

1
आप दिलचस्प impमॉड्यूल और जादू कॉल कर सकते हैं __import__।
— विटोल्ड एस।

कोई व्यक्ति अपने डोमेन को नवीनीकृत करना भूल गया: \
— स्पेसल

48

बस "शामिल करें" कमांड लिखें:

import os

def include(filename):
    if os.path.exists(filename): 
        execfile(filename)


include('myfile.py')

@ डेलीट:

@ बेफ़िक टिप्पणी सही है, अजगर 2 और 3 संगतता के लिए, आपको या तो चाहिए:

पायथन 2 और 3: वैकल्पिक 1

from past.builtins import execfile

execfile('myfile.py')

पायथन 2 और 3: वैकल्पिक 2

exec(compile(open('myfile.py').read()))

3
क्या ऐसा करने का कोई कारण है from module import *? इसके अलावा, यदि आप जिस फ़ाइल को कॉल कर रहे हैं, उसका कोड शरीर में है, तो वह कोड चलाया जाएगा, यदि आप ऐसा करते हैं।
— n

4
@ naught101: यह लक्ष्य है: कोड चलाना, जो आयात के साथ नहीं होता है। आमतौर पर यह सिर्फ चर को परिभाषित करता है।
— लुई

2
@ डेली पाइथन 3 में नहीं हैexecfile
— bfieck

7
वास्तव में अजगर 3 में compile()उल्लेख की तुलना में एक और हस्ताक्षर है । तो सही अजगर 2 और 3: वैकल्पिक 2 होगा:exec(compile(source=open('myfile.py').read(), filename='myfile.py', mode='exec'))
— TriAnMan

3
'शामिल' हेल्पर फंक्शन काम नहीं करता है, अगर आप 'शामिल' के कॉलर में दायरे में शामिल फ़ाइल में वेरिएबल होना चाहते हैं
— paulj

35

यदि तुम प्रयोग करते हो:

import Math

तब वह आपको मठ के कार्यों का उपयोग करने की अनुमति देगा, लेकिन आपको Math.Calculate अवश्य करना चाहिए, ताकि वह स्पष्ट रूप से वही हो जो आप नहीं चाहते हैं।

यदि आप बिना किसी उपसर्ग के मॉड्यूल के कार्यों को आयात करना चाहते हैं, तो आपको उन्हें स्पष्ट रूप से नाम देना होगा, जैसे:

from Math import Calculate, Add, Subtract

अब, आप केवल उनके नाम से गणना, जोड़ें और घटाएँ को संदर्भित कर सकते हैं। यदि आप गणित से सभी कार्यों को आयात करना चाहते हैं, तो करें:

from Math import *

हालांकि, आपको उन मॉड्यूल के साथ ऐसा करते समय बहुत सावधानी बरतनी चाहिए जिनकी सामग्री आप अनिश्चित हैं। यदि आप दो मॉड्यूल आयात करते हैं जिनमें समान फ़ंक्शन नाम की परिभाषाएँ हैं, तो एक फ़ंक्शन दूसरे को अधिलेखित कर देगा, आपके साथ कोई भी समझदार नहीं होगा।


1

मैंने पाया है कि अजगर निरीक्षण मॉड्यूल बहुत उपयोगी है

उदाहरण के लिए teststuff.py

import inspect

def dostuff():
    return __name__

DOSTUFF_SOURCE = inspect.getsource(dostuff)

if __name__ == "__main__":

    dostuff()

और दूसरी स्क्रिप्ट या पाइथन कंसोल से

import teststuff

exec(DOSTUFF_SOURCE)

dostuff()

और अब dostuff स्थानीय दायरे में होना चाहिए और dostuff () कंसोल या स्क्रिप्ट को वापस लौटा देगा _ name _ जबकि test.dostuff () निष्पादित करने से अजगर मॉड्यूल नाम वापस आ जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.