পাইথনের অন্য ফাইল থেকে একটি ফাংশন কল করুন


496

সেট_আপ: আমার একটি প্রোগ্রামে ব্যবহার করতে হবে প্রতিটি ফাংশনের জন্য আমার কাছে একটি .py ফাইল রয়েছে।

এই প্রোগ্রামে, আমাকে বাহ্যিক ফাইলগুলি থেকে ফাংশনটি কল করতে হবে।

আমি চেষ্টা করেছিলাম:

from file.py import function(a,b)

তবে আমি ত্রুটি পেয়েছি:

ImportError: 'file.py' নামে কোনও মডিউল নেই; ফাইল কোনও প্যাকেজ নয়

আমি কীভাবে এই সমস্যাটি সমাধান করব?


65
from file import function। ফাইল এক্সটেনশন বা ফাংশন প্যারামিটারের প্রয়োজন নেই
6:30 এ সমর্যাপ করুন

4
পাইথন টিউটোরিয়ালটিতে আপনার সম্ভবত মডিউল বিভাগের মধ্য দিয়ে যাওয়া উচিত ।
বুরহান খালিদ

কেবল পাইচার্মস ব্যবহার করা হচ্ছে কিনা তা নিশ্চিত করুন, তবে এটি কেবল একটি আন্ডারস্কোর ডিলিটযুক্ত ফাইলের নামটি সনাক্ত করতে পারে।
জেরি

এছাড়াও আপনি যদি ফাংশনটি আমদানি করতে চান তবে file.pyনিশ্চিত করুন যে নামের সাথে আপনার ডিরেক্টরিতে কোনও প্যাকেজ নেই file
সোমবার

উত্তর:


552

সেখানে যোগ করার জন্য দরকার নেই file.pyআমদানী করার সময়। কেবল লিখুন from file import function, এবং তারপরে ফাংশনটি কল করুন function(a, b)। এটি কাজ না করার কারণ, কারণ fileএটি পাইথনের অন্যতম মূল মডিউল, সুতরাং আমি আপনাকে নিজের ফাইলের নাম পরিবর্তন করার পরামর্শ দিই।

মনে রাখবেন যে আপনি যদি a.pyকোনও ফাইল থেকে ফাংশন আমদানির চেষ্টা করছেন তবে আপনাকে তা b.pyনিশ্চিত করতে হবে a.pyএবং b.pyএকই ডিরেক্টরিতে রয়েছে।


3
প্রকৃত ফাইলের নাম নয়, আমি যে প্রশ্নটি জিজ্ঞাসা করছি তার জন্য "ফাইল" কেবল স্থানধারক ছিল। ধন্যবাদ যদিও. আমি এটি চেষ্টা করব এবং আপনার কাছে ফিরে যাব।
ব্যবহারকারী 2977230

4
আমি এটি চেষ্টা করেছিলাম তবে এটি ত্রুটিটি এখনও দেখায়: পাইথন 3 এর সাথে এর কোনও যোগসূত্র রয়েছে, নাকি সাধারণ সমস্যা?
ডারকরোজ

4
@ গেমস ব্রেনিয়াক, আপনি যে ফাইলটি ফাংশন আমদানি করতে চান তা যদি কোনও ভিন্ন ডিরেক্টরিতে থাকে তবে কী হবে? আমি ফাইলপথটি ফাইলের নামের আগে অন্তর্ভুক্ত করতে পারি বা আরও জটিল কিছু আছে কি?
টম

5
@ টম আপনাকে সে পথটি পাইথোনপথ ভেরিয়েবলটিতে যুক্ত করতে হবে যদি এটি ইতিমধ্যে সেখানে না থাকে।
গেমস ব্রেনিয়াক

13
এটি একই ডিরেক্টরিতে না থাকলে a.py থেকে কোনও ফাইল b.py এ ফাংশন আমদানির কোনও উপায় আছে কি?
নির্বান সেনগুপ্ত

192

সবার আগে আপনার দরকার নেই .py

আপনার যদি ফাইল থাকে a.pyএবং ভিতরে আপনার কিছু ফাংশন থাকে:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

এবং আপনি এগুলি আমদানি করতে চান z.pyআপনাকে লিখতে হবে

from a import b, c

47
আপনি আমদানিও করতে পারেন *
দিমিতর মেরিনভ

1
@ দিমিতরমারিনভ * দিয়ে ফাইলের নাম প্রতিস্থাপন করেছেন?
কার্লো

3
@Karlo, না, শুধু *
Dimitar Marinov

26
"আমদানি *" ব্যবহার করা একটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়। সুস্পষ্ট বর্ণিত চেয়ে ভাল।
ফ্রান্সিসকো

যদি a.py ফোল্ডারে থাকে fol1 বলুন, তবে এটি কীভাবে আমদানি করা হবে? @ ডিমিতর-মেরিনভ
আদিত্য সি

57

আপনি এটি 2 উপায়ে করতে পারেন। প্রথমটি হ'ল ফাইল.পি. থেকে আপনার নির্দিষ্ট ফাংশনটি আমদানি করা is এই ব্যবহার করতে

from file import function

অন্য উপায়টি হ'ল সম্পূর্ণ ফাইলটি আমদানি করা

import file as fl

তারপরে আপনি file.py ব্যবহার করে যে কোনও ফাংশন কল করতে পারেন

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
এটি কি পাইথনপথে পথ যোগ করার মতো নয়?
বরিশ

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

একই বৈশিষ্ট্যটি জুড়ে এসেছিল তবে এটিকে কাজ করতে আমাকে নীচের কাজটি করতে হয়েছিল।

যদি আপনি 'মডিউল নটফাউন্ডএরার: কোনও মডিউল নামকরণ করা' না দেখেন তবে আপনার সম্ভবত নীচের মতো ফাইলের সামনে ডট (।) দরকার হবে;

.ফিল আমদানি ফান্ট থেকে


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.pyপাইপাই ফাইল লোড করার চেষ্টা করি তখন উইচের উপস্থিতি নেই। ব্যবহার from fn.py import funcnameখুব বেশি কাজ করেনি। ধন্যবাদ.
এম 3 এন্ড

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 ফাইল থেকে ফাংশন (অবশ্যই (আলাদাভাবে) বিভিন্ন ডিরেক্টরিতে থাকতে পারে) কেবল প্রথমে ডিরেক্টরি লিখে এবং তারপর ফাইলের নাম .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 আমদানি অ্যাডফুন থেকে


2

মনে করুন আপনি যে ফাইলটি কল করতে চান সেটি অন্য ফাইলাইল.পি এবং আপনি যে পদ্ধতিতে কল করতে চান সেটি হল পদ্ধতি 1, তারপরে প্রথমে ফাইলটি আমদানি করুন এবং তারপরে পদ্ধতিটি

from anotherfile import method1

মেথড 1 যদি কোনও ক্লাসের অংশ হয় তবে ক্লাসটি ক্লাস 1 হতে দিন

from anotherfile import class1

তারপরে ক্লাস 1 এর একটি অবজেক্ট তৈরি করুন, ধরুন অবজেক্টের নামটি হল ob1, তবে

ob1 = class1()
ob1.method1()

2

আমার ক্ষেত্রে আমি আমার ফাইলটির নাম দিয়েছি helper.scrap.pyএবং আমি পরিবর্তন না হওয়া পর্যন্ত এটিকে কাজ করতে পারি নাhelper.py


1
আমি মনে করি না আপনি থাকতে পারেন। বা - ফাইলের নামগুলিতে
জেফচার্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.