पायथन में किसी अन्य फ़ाइल से फ़ंक्शन को कॉल करें


496

Set_up: मेरे पास एक प्रोग्राम में उपयोग करने के लिए आवश्यक प्रत्येक फ़ंक्शन के लिए एक .py फ़ाइल है।

इस कार्यक्रम में, मुझे बाहरी फ़ाइलों से फ़ंक्शन को कॉल करने की आवश्यकता है।

मैंने कोशिश की:

from file.py import function(a,b)

लेकिन मुझे त्रुटि मिलती है:

ImportError: 'file.py' नाम का कोई मॉड्यूल नहीं; फ़ाइल पैकेज नहीं है

मैं इस समस्या को कैसे हल करूं?


65
from file import function। फ़ाइल एक्सटेंशन या फ़ंक्शन पैरामीटर के लिए कोई ज़रूरत नहीं है
samrap

4
आपको शायद पायथन ट्यूटोरियल में मॉड्यूल अनुभाग के माध्यम से जाना चाहिए ।
बुरहान खालिद

बस सुनिश्चित करें कि यदि PyCharms का उपयोग कर रहे हैं, तो यह केवल एक अंडरस्कोर सीमांकित फ़ाइलनाम को पहचान लेगा।
जेरी

इसके अलावा अगर आप फंक्शन को इम्पोर्ट करना चाहते हैं file.py, तो सुनिश्चित करें कि नाम के साथ आपकी डायरेक्टरी में कोई पैकेज नहीं है file
SomeBruh

जवाबों:


553

file.pyआयात करते समय जोड़ने की कोई आवश्यकता नहीं है । बस लिखें from file import function, और फिर फ़ंक्शन का उपयोग करके कॉल करें function(a, b)। इसका कारण यह नहीं हो सकता है, क्योंकि fileपायथन के मुख्य मॉड्यूल में से एक है, इसलिए मैं आपको अपनी फ़ाइल का नाम बदलने का सुझाव देता हूं।

ध्यान दें कि आप से आयात कार्यों के लिए कोशिश कर रहे हैं a.pyनामक एक फाइल करने के लिए b.py, आप यह सुनिश्चित करें कि करने की आवश्यकता होगी a.pyऔर b.pyउसी निर्देशिका में हैं।


3
"फ़ाइल" मेरे द्वारा पूछे गए प्रश्न के लिए सिर्फ एक प्लेसहोल्डर था, वास्तविक फ़ाइल नाम नहीं। फिर भी आपका धन्यवाद। मैं यह कोशिश करूंगा और आपसे वापस मिलूंगा।
user2977230

4
मैंने यह कोशिश की, लेकिन यह अभी भी त्रुटि दिखा रहा है: क्या इसे पायथन 3 के साथ कुछ भी करना है, या एक सामान्य समस्या है?
DarkRose

4
@ GameBrainiac, क्या होगा यदि आप जिस फ़ाइल से फ़ंक्शंस आयात करना चाहते हैं वह एक अलग निर्देशिका में है? क्या मैं फ़ाइल नाम से पहले फ़ाइलपथ शामिल कर सकता हूँ, या कुछ और अधिक जटिल है?
टॉम

6
@ तो आपको PYTHONPATH वैरिएबल में वह रास्ता जोड़ना होगा अगर यह पहले से ही वहां नहीं है।
गेम्स ब्रेनियाक

13
यदि वे एक ही निर्देशिका में नहीं हैं, तो क्या एफ़टीपी से फ़ंक्शंस के लिए फ़ाइल b.py?
निर्वाण सेनगुप्ता

192

सबसे पहले आप एक की जरूरत नहीं है .py

यदि आपके पास एक फ़ाइल है a.pyऔर आपके अंदर कुछ कार्य हैं:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

और आप उन्हें z.pyलिखना चाहते हैं

from a import b, c

47
तुम भी आयात कर सकते हैं *
Dimitar Marinov

1
@DimitarMarinov के साथ * फ़ाइल नाम द्वारा प्रतिस्थापित किया गया?
कार्लो

3
@ कार्लो, नहीं, सिर्फ *
दिमितार

26
"आयात *" का उपयोग करना एक बुरा अभ्यास माना जाता है। निहितार्थ की तुलना में स्पष्ट है।
फ्रांसिस्को गुटियारेज़

यदि कोई फोल्डर फोल्लो फॉल 1 कहता है, तो उसे कैसे आयात किया जाएगा? @ डिमिटर-मारिनोव
आदित्य सी।

57

आप इसे 2 तरीकों से कर सकते हैं। सबसे पहले बस उस विशिष्ट फ़ंक्शन को आयात करना है जिसे आप file.py से चाहते हैं। यह प्रयोग करने के लिए

from file import function

दूसरा तरीका पूरी फाइल को इम्पोर्ट करना है

import file as fl

तब आप फाइल के अंदर किसी भी फ़ंक्शन का उपयोग करके कॉल कर सकते हैं

fl.function(a,b)

36

आप किसी भिन्न निर्देशिका से फ़ंक्शन को कॉल कर सकते हैं, साथ ही आप जिस निर्देशिका में काम कर रहे हैं, उसी फ़ंक्शन को नहीं कर सकते हैं या नहीं करना चाहते हैं। आप इसे दो तरीकों से कर सकते हैं (शायद अधिक विकल्प हैं, लेकिन ये वही हैं जिन्होंने मेरे लिए काम किया है)।

वैकल्पिक 1 अस्थायी रूप से अपनी कार्यशील निर्देशिका को बदलें

import os

os.chdir("**Put here the directory where you have the file with your function**")

from file import function

os.chdir("**Put here the directory where you were working**")

वैकल्पिक 2 उस निर्देशिका को जोड़ें जहां आपके पास sys.path पर अपना फ़ंक्शन है

import sys

sys.path.append("**Put here the directory where you have the file with your function**")

from file import function

1
यह PYTHONPATH के लिए रास्ता जोड़ने के समान नहीं है?
बिरिश

33

यदि आपकी फ़ाइल अलग पैकेज संरचना में है और आप इसे अलग पैकेज से कॉल करना चाहते हैं, तो आप इसे उस तरीके से कॉल कर सकते हैं:

मान लीजिए कि आपके अजगर परियोजना में निम्नलिखित पैकेज संरचना है:

पायथन पैकेज और फ़ाइल संरचना

में - com.my.func.DifferentFunctionअजगर फ़ाइल आपके पास कुछ फ़ंक्शन है, जैसे:

def add(arg1, arg2):
    return arg1 + arg2

def sub(arg1, arg2) :
    return arg1 - arg2

def mul(arg1, arg2) :
    return arg1 * arg2

और आप अलग-अलग फ़ंक्शन से कॉल करना चाहते हैं Example3.py, फिर निम्न तरीके से आप इसे कर सकते हैं:

Example3.pyसभी फ़ंक्शन आयात करने के लिए आयात विवरण को फ़ाइल में परिभाषित करें

from com.my.func.DifferentFunction import *

या प्रत्येक फ़ंक्शन नाम को परिभाषित करें जिसे आप आयात करना चाहते हैं

from com.my.func.DifferentFunction import add, sub, mul

फिर Example3.pyआप निष्पादन के लिए फ़ंक्शन को कॉल कर सकते हैं:

num1 = 20
num2 = 10

print("\n add : ", add(num1,num2))
print("\n sub : ", sub(num1,num2))
print("\n mul : ", mul(num1,num2))

आउटपुट:

 add :  30

 sub :  10

 mul :  200

3
ग्लोब आयात को हतोत्साहित किया जाता है।
jdhao

21

एक ही सुविधा में आया था, लेकिन मुझे यह काम करने के लिए नीचे करना पड़ा।

यदि आप 'ModuleNotFoundError: No मॉड्यूल नाम' देख रहे हैं, तो आपको शायद नीचे दिए गए फ़ाइल नाम के सामने डॉट (।) की आवश्यकता होगी;

से .file आयात funtion


13

पहले फ़ाइल को .py प्रारूप में सहेजें (उदाहरण के लिए, my_example.py)। और अगर उस फ़ाइल में फ़ंक्शन हैं,

def xyz():

        --------

        --------

def abc():

        --------

        --------

कॉलिंग फ़ंक्शन में आपको बस नीचे की पंक्तियों को लिखना होगा।

file_name: my_example2.py

============================

import my_example.py


a = my_example.xyz()

b = my_example.abc()

============================


2
मुझे नहीं पता कि मेरी असफलता अजगर संस्करणों के बारे में है। मैं इस उदाहरण का चयन import fn(विस्तार के बिना) कर रहा हूं और सीधे मुख्य फाइल पर उनका उपयोग कर रहा हूं fn.my_funcion()। जब मैं import fn.pypy.py फ़ाइल लोड करने की कोशिश करता हूं, तो वह मौजूद नहीं है। का उपयोग from fn.py import funcnameभी काम नहीं किया। धन्यवाद।
m3nda

13

मॉड्यूल को 'फ़ाइल' के अलावा किसी अन्य चीज़ का नाम दें।

तब यह भी सुनिश्चित करें कि जब आप फ़ंक्शन को कॉल कर रहे हैं:

1) यदि आप पूरे मॉड्यूल का आयात कर रहे हैं, तो आप कॉल करते समय मॉड्यूल का नाम दोहराते हैं:

import module
module.function_name()

या

import pizza
pizza.pizza_function()

2) या यदि आप विशिष्ट कार्यों का आयात कर रहे हैं, एक उपनाम के साथ कार्य, या * का उपयोग करते हुए सभी कार्य, आप मॉड्यूल का नाम नहीं दोहराते हैं:

from pizza import pizza_function
pizza_function()

या

from pizza import pizza_function as pf
pf()

या

from pizza import *
pizza_function()

9

.Py फ़ाइल से कार्य (अलग-अलग निर्देशिका में हो सकते हैं)

from directory_name.file_name import function_name

और बाद में उपयोग किया जा सकता है: function_name()


8

मैथमेथोड के अंदर।

def Add(a,b):
   return a+b 

def subtract(a,b):
  return a-b

मेन के अंदर

import MathMethod as MM 
  print(MM.Add(200,1000))

आउटपुट: 1200


6

आप को जोड़ने के लिए की जरूरत नहीं है file.py

बस फ़ाइल को उसी स्थान पर रखें जहाँ से फ़ाइल आयात करना चाहते हैं। फिर बस अपने कार्यों को आयात करें:

from file import a, b

ओह यकीन है कि यह नहीं है। मैं टाइप करने के लिए मतलब नहीं था। यह एक टाइपो है
मोहन

4

आपके पास उसी स्थान पर फ़ाइल होनी चाहिए, जिस पायथन फ़ाइलों को आप आयात करने का प्रयास कर रहे हैं। साथ ही 'फाइल इंपोर्ट फंक्शन से' काफी है।


4

यदि आप इस फ़ाइल को उसी निर्देशिका में आयात करना चाहते हैं, जहां आप अपना कोड चला रहे हैं, तो फ़ाइल नाम के सामने एक बिंदु (।) जोड़ें।

उदाहरण के लिए, मैं एक फ़ाइल का नाम रन कर रहा हूँ, जो कि, सीएचडीओ ’नामक है और मैं ऐडफ़न नाम की एक विधि का आयात करना चाहता हूँ, जो कि बीएचडीओ में लिखा गया है, और बीओएमडी उसी निर्देशिका में है।

से .b आयात addFun


2

मान लें कि जिस फ़ाइल को आप कॉल करना चाहते हैं वह है अन्य फ़ाइल और आप जिस विधि से कॉल करना चाहते हैं वह है method1, फिर पहले फ़ाइल आयात करें और फिर विधि

from anotherfile import method1

अगर मेथड 1 एक क्लास का हिस्सा है, तो क्लास को क्लास 1 होने दें

from anotherfile import class1

तब class1 का ऑब्जेक्ट बनाएं, मान लें कि ऑब्जेक्ट का नाम ob1 है, फिर

ob1 = class1()
ob1.method1()

2

मेरे मामले में मैंने अपनी फ़ाइल का नाम दिया helper.scrap.pyऔर जब तक मैं बदल नहीं गया, तब तक यह काम नहीं कर सकाhelper.py


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