অন্যান্য পাইথন ফাইলগুলি কীভাবে আমদানি করবেন?


796

পাইথনে আমি অন্যান্য ফাইলগুলি কীভাবে আমদানি করব?

  1. আমি ঠিক কীভাবে একটি নির্দিষ্ট অজগর ফাইলটি আমদানি করতে পারি import file.py?
  2. আমি কীভাবে একটি নির্দিষ্ট ফাইলের পরিবর্তে একটি ফোল্ডার আমদানি করতে পারি?
  3. আমি ইউজার ইনপুট এর উপর ভিত্তি করে রানটাইম এ গলিতভাবে একটি পাইথন ফাইল লোড করতে চাই।
  4. আমি ফাইল থেকে কীভাবে একটি নির্দিষ্ট অংশ লোড করতে পারি তা জানতে চাই।

উদাহরণস্বরূপ, main.pyআমার মধ্যে :

from extra import * 

যদিও এটি আমাকে সমস্ত সংজ্ঞা দেয় extra.py, যখন আমি চাই সমস্তগুলিই একটি সংজ্ঞা:

def gap():
    print
    print

importস্রেফ gapথেকে পেতে আমি কী বিবৃতিতে যুক্ত করব extra.py?


উত্তর:


441

importlibপ্রোগ্রাম্যালি মডিউল আমদানি করতে পাইথন 3-এ যুক্ত করা হয়েছিল। এটি কেবল চারদিকে একটি মোড়ক __import__, ডক্স দেখুন

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

দ্রষ্টব্য: .pyএক্সটেনশনটি এখান থেকে সরানো উচিত moduleName। ফাংশনটি packageআপেক্ষিক আমদানির জন্য একটি যুক্তিও সংজ্ঞায়িত করে ।


আপডেট: নীচের উত্তর পুরানো । উপরে আরও সাম্প্রতিক বিকল্প ব্যবহার করুন।

  1. শুধু import file'.py' এক্সটেনশন ছাড়াই।

  2. নামের একটি খালি ফাইল যুক্ত করে আপনি কোনও ফোল্ডারটিকে প্যাকেজ হিসাবে চিহ্নিত করতে পারেন __init__.py

  3. আপনি __import__ফাংশন ব্যবহার করতে পারেন । এটি স্ট্রিং হিসাবে মডিউল নাম লাগে। (আবার: '.py' এক্সটেনশন ছাড়াই মডিউলটির নাম))

    pmName = input('Enter module name:')
    pm = __import__(pmName)
    print(dir(pm))

    help(__import__)আরও বিশদ জন্য টাইপ করুন।


7
আপনি একটি যুক্ত করে থাকেন import filenameকরার Init .py তারপর আপনি যেমন ফোল্ডার নাম সরাসরি মডিউলে আমদানি করতে পারেন।
কর্নস্মিথ

9
থেকে help(__import__):Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.
তাদগ ম্যাকডোনাল্ড-জেনসেন

6
যদি এটি প্যাকেজ না হয়ে কেবল একটি স্ক্রিপ্ট ফাইল হয়?
জোনাথন

3
একই পথে স্ক্রিপ্ট ফাইলটি আমদানির জন্য (এটি পাইথন অনুসন্ধানের পথে স্ক্রিপ্ট ফাইলের জন্যও কাজ করবে), import filenamenoextপাইথন ৩.৪.৮ সহ আমার পক্ষে ঠিক কাজ করে।
অ্যালেক্স হল

7
এটি কি 2019 সালে এখনও সঠিক? এটি অজগর 3 বা 2?
স্যান্ডবুর্গ 24'19

1030

অজগর ফাইলটি আমদানি করার অনেকগুলি উপায় রয়েছে, সবগুলিই তার পক্ষে মতামত এবং কনসস।

আপনার জন্য কাজ করে এমন প্রথম আমদানি কৌশলটি তাড়াহুড়ো করে বেছে নেবেন না অন্যথায় আপনি যখন কোডবেসটি আপনার প্রয়োজনগুলি পূরণ করেন না তখনই আপনাকে আবার লিখতে হবে।

আমি সহজতম উদাহরণ # 1 ব্যাখ্যা দিয়ে শুরু করব, তারপরে আমি সর্বাধিক পেশাদার এবং দৃust় উদাহরণ # 7 এর দিকে এগিয়ে যাব

উদাহরণ 1, পাইথন ইন্টারপ্রেটার দিয়ে পাইথন মডিউলটি আমদানি করুন:

  1. এটিকে / home/el/foo/fox.py এ রাখুন:

    def what_does_the_fox_say():
      print("vixens cry")
  2. অজগর দোভাষী প্রবেশ করুন:

    el@apollo:/home/el/foo$ python
    Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
    >>> import fox
    >>> fox.what_does_the_fox_say()
    vixens cry
    >>> 

    আপনি পাইথন দোভাষী দ্বারা শিয়াল আমদানি করেছেন, what_does_the_fox_say()fox.py এর মধ্যে থেকে পাইথন ফাংশনটি শুরু করেছেন।

উদাহরণ 2, স্ক্রিপ্টে অন্য পাইথন ফাইলটি নির্ধারণ করতে স্ক্রিপ্টে execfileবা ( execপাইথন 3 এ ) ব্যবহার করুন :

  1. এটিকে / home/el/foo2/mylib.py এ রাখুন:

    def moobar():
      print("hi")
  2. এটিকে / home/el/foo2/main.py এ রাখুন:

    execfile("/home/el/foo2/mylib.py")
    moobar()
  3. ফাইলটি চালান:

    el@apollo:/home/el/foo$ python main.py
    hi

    মুবার ফাংশনটি mylib.py থেকে আমদানি করা হয়েছিল এবং মেইন.পাই-তে উপলব্ধ করা হয়েছিল

উদাহরণ 3, এর থেকে ... আমদানি করুন ... কার্যকারিতা:

  1. এটিকে / home/el/foo3/chekov.py এ রাখুন:

    def question():
      print "where are the nuclear wessels?"
  2. এটিকে / home/el/foo3/main.py এ রাখুন:

    from chekov import question
    question()
  3. এটি এইভাবে চালান:

    el@apollo:/home/el/foo3$ python main.py 
    where are the nuclear wessels?

    আপনি যদি চেকোভ.পি-তে অন্য ফাংশনগুলি সংজ্ঞায়িত করেন তবে আপনি না করলে সেগুলি উপলভ্য হবে না import *

উদাহরণ 4, riaa.py আমদানি করুন যদি এটি যেখান থেকে আমদানি করা হয় তবে এটি অন্য কোনও ফাইলের অবস্থানের হয়

  1. এটিকে / home/el/foo4/stuff/riaa.py এ রাখুন:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
  2. এটিকে / home/el/foo4/main.py এ রাখুন:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
  3. চালাও এটা:

    el@apollo:/home/el/foo4$ python main.py 
    computers are transforming into a noose and a yoke for humans

    এটি বিদেশী ফাইলের সমস্ত কিছু আলাদা ডিরেক্টরি থেকে আমদানি করে।

5 উদাহরণ, ব্যবহার os.system("python yourfile.py")

import os
os.system("python yourfile.py")

উদাহরণ 6, পাইগব্যাকিংয়ের মাধ্যমে পাইথন স্টার্টআপুকের মাধ্যমে আপনার ফাইলটি আমদানি করুন:

আপডেট: এই উদাহরণটি পাইথন 2 এবং 3 উভয়ের জন্যই কাজ করে তবে এখন কেবল পাইথন 2 এর জন্য কাজ করে। পাইথন 3 এই ব্যবহারকারী স্টার্টহুক বৈশিষ্ট্য সেটটি থেকে মুক্তি পেয়েছে কারণ এটি অল্প দক্ষতার পাইথন গ্রন্থাগার লেখক দ্বারা ব্যবহার করা হয়েছিল, এটি ব্যবহারকারীর দ্বারা সংজ্ঞায়িত সমস্ত প্রোগ্রামের আগে গ্লোবাল নেমস্পেসে তাদের কোডটি কার্যকরভাবে ইনজেক্ট করার জন্য ব্যবহার করে। আপনি যদি পাইথন 3 এর জন্য কাজ করতে চান তবে আপনাকে আরও সৃজনশীল হতে হবে। যদি আমি আপনাকে এটি কীভাবে করতে বলি, অজগর বিকাশকারীরা সেই বৈশিষ্ট্য সেটটিও অক্ষম করে দেবে, সুতরাং আপনি নিজেরাই।

দেখুন: https://docs.python.org/2/library/user.html

এই কোডটি আপনার হোম ডিরেক্টরিতে রাখুন ~/.pythonrc.py

class secretclass:
    def secretmessage(cls, myarg):
        return myarg + " is if.. up in the sky, the sky"
    secretmessage = classmethod( secretmessage )

    def skycake(cls):
        return "cookie and sky pie people can't go up and "
    skycake = classmethod( skycake )

এই কোডটি আপনার মেইন.পাইতে রাখুন (যে কোনও জায়গায় হতে পারে):

import user
msg = "The only way skycake tates good" 
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")

এটি চালান, আপনার এটি করা উচিত:

$ python main.py
The only way skycake tates good is if.. up in the sky, 
the skycookie and sky pie people can't go up and  have the sky pie! 
SKYCAKE!

যদি আপনি এখানে ত্রুটি পান: ModuleNotFoundError: No module named 'user'তবে এর অর্থ আপনি পাইথন 3 ব্যবহার করছেন, সেখানে স্টার্টআপ বইগুলি ডিফল্টরূপে অক্ষম করা আছে।

এই জাস্টটির ক্রেডিট এতে যায়: https://github.com/doc पात/homedir-example/blob/master/python-commandline/.pythonrc.py আপনার আপ-বোট বরাবর প্রেরণ করুন।

উদাহরণ 7, সর্বাধিক শক্তিশালী: খালি আমদানি কমান্ড দিয়ে পাইথনে ফাইলগুলি আমদানি করুন:

  1. একটি নতুন ডিরেক্টরি তৈরি করুন /home/el/foo5/
  2. একটি নতুন ডিরেক্টরি তৈরি করুন /home/el/foo5/herp
  3. __init__.pyহার্পের অধীনে একটি খালি ফাইল তৈরি করুন :

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
  4. একটি নতুন ডিরেক্টরি / হোম / এল / foo5 / হার্প / ডার্প তৈরি করুন

  5. ডের্পের অধীনে, অন্য একটি __init__.pyফাইল তৈরি করুন:

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
  6. আন্ডার / হোম / এল / foo5 / হার্প / ডার্প একটি নতুন ফাইল এটি yolo.pyরাখুন নামে রাখুন:

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
  7. সত্যের মুহূর্তটি, নতুন ফাইলটি তৈরি করুন /home/el/foo5/main.py, এটি এখানে রাখুন;

    from herp.derp.yolo import skycake
    skycake()
  8. চালাও এটা:

    el@apollo:/home/el/foo5$ python main.py
    SkyCake evolves to stay just beyond the cognitive reach of the bulk 
    of men. SKYCAKE!!

    খালি __init__.pyফাইলটি পাইথন ইন্টারপ্রেটারের সাথে যোগাযোগ করে যে বিকাশকারী এই ডিরেক্টরিটিকে একটি আমদানযোগ্য প্যাকেজ হিসাবে অভিহিত করে।

আপনি যদি ডিরেক্টরিতে সমস্ত .py ফাইল অন্তর্ভুক্ত করতে চান তবে আমার পোস্টটি দেখতে এখানে দেখুন: https://stackoverflow.com/a/20753073/445131


6
আপনার উদাহরণ 6 যোগ করা উচিত: ব্যবহার করে __import__(py_file_name)। বিস্ময়কর গাইড যাইহোক
অরিডাম

4
যতবারই আমার আমদানি সংক্রান্ত সমস্যা হয় আমি এই প্রশ্নটি শেষ করি এবং সর্বদা আমার সমস্যা সমাধান করতে সক্ষম হয়েছি। আপনি যখন আমাকে সাহায্য করেছেন প্রতিবারের জন্য যদি আমি এটি উত্সাহ দিতে পারতাম তবে আমি করব।
ডিজিবিপি

4
এই সমস্তগুলির মধ্যে বড় পার্থক্য কী এবং কেন অন্য কোনওটির চেয়ে ভাল? উদাহরণস্বরূপ 5, আপনি "বেয়ার আমদানি কমান্ডের সাহায্যে পাইথনগুলিতে ফাইলগুলি আমদানি করুন" লিখেছেন, তবে আপনি 1, 3 এবং 4 উদাহরণগুলিতে (খালি?) আমদানি কমান্ডটিও ব্যবহার করেন, তাই না?
হ্যালো গুডবাই

33
উত্তম উত্তর তবে আপনি যে সমস্ত সময় একটি ভিন্ন আমদানি ফাইল ব্যবহার করেন উদাহরণস্বরূপ এটি পড়ার পক্ষে জটিল হয়ে পড়ে।
জেনেট করা হয়েছে

2
আমি জোর দিয়ে বলতে চাই যে আপনি উইন্ডোজে কাজ করলেও আমদানি কেস সংবেদনশীল। সুতরাং আপনার কাছে মডিউল.পি থাকতে পারে না এবং আপনার কোড আমদানি মডিউলটিতে থাকতে পারে
রাডাটো

66

পরিচিত নাম সহ 'রানটাইম' এ একটি নির্দিষ্ট পাইথন ফাইল আমদানি করতে:

import os
import sys

...

scriptpath = "../Test/"

# Add the directory containing your module to the Python path (wants absolute paths)
sys.path.append(os.path.abspath(scriptpath))

# Do the import
import MyModule

আমার বন্ধুটি আজ ভাগ্যবিহীনভাবে এটি পরীক্ষা করেছে - দেখে মনে হচ্ছে ফাইলের নামটি সেখানে থাকা উচিত নয়। তিনি প্যারেন্ট ডিরেক্টরিতে স্থানীয় ফাইল ব্যবহার করেছিলেন এবং "./" শেষে কাজ করেছিলেন যেন পিতামহিত ডিরেক্টরি (..)। পোস্টে সমস্যা সমাধান করা প্রত্যাখ্যান করা হয়েছিল - সম্ভবত ভুল বোঝাবুঝি (?) Sys.path মুদ্রণ করুন এবং আপনি নিশ্চিত না হলে রেকর্ডগুলির তুলনা করুন ...
টম

29

পাইথন ফাইলটি অন্য ফোল্ডার থেকে অন্য ফোল্ডারে আমদানি করার জন্য আপনার কাছে অনেক জটিল পদ্ধতি নেই। এই ফোল্ডারটিকে একটি অজগর প্যাকেজ হিসাবে ঘোষণা করার জন্য একটি __init__.py ফাইল তৈরি করুন এবং তারপরে আপনার হোস্ট ফাইলে যান যেখানে আপনি কেবল টাইপ আমদানি করতে চান

from root.parent.folder.file import variable, class, whatever


14
আমি যদি কোনও আপেক্ষিক পথ চাই?
ডোমিঃ

21

আমদানি ডক .. - রেফারেন্সের জন্য লিঙ্ক

__init__.pyফাইল হিসেবে প্যাকেজ ধারণকারী পাইথন আচরণ ডিরেক্টরি তৈরি করতে প্রয়োজন বোধ থাকে, তখন এই অনিচ্ছাকৃতভাবে বৈধ মডিউল যা মডিউল অনুসন্ধান পথে পরে ঘটতে গোপন এই ধরনের স্ট্রিং হিসেবে একটি সাধারণ নাম দিয়ে ডিরেক্টরি, প্রতিরোধ করা, সম্পন্ন করা হয়।

__init__.pyকেবল খালি ফাইল হতে পারে তবে এটি প্যাকেজের জন্য আরম্ভকরণ কোডটি কার্যকর করতে পারে বা __all__ভেরিয়েবল সেট করতে পারে।

mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module

19

প্রথম কেস: আপনি A.pyফাইলটিতে ফাইল আমদানি করতে চান B.py, এই দুটি ফাইল একই ফোল্ডারে রয়েছে:

. 
├── A.py 
└── B.py

আপনি ফাইলটিতে এটি করতে পারেন B.py:

import A

অথবা

from A import *

অথবা

from A import THINGS_YOU_WANT_TO_IMPORT_IN_A

তারপরে আপনি A.pyফাইলের ফাইলের সমস্ত ফাংশন ব্যবহার করতে সক্ষম হবেনB.py


দ্বিতীয় কেস: আপনি folder/A.pyফাইলটিতে ফাইল আমদানি করতে চান B.py, এই দুটি ফাইল একই ফোল্ডারে নেই, যেমন:

.
├── B.py
└── folder
     └── A.py

আপনি বি ফাইলটিতে এটি করতে পারেন:

import folder.A

অথবা

from folder.A import *

অথবা

from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A

তারপরে আপনি A.pyফাইলের ফাইলের সমস্ত ফাংশন ব্যবহার করতে সক্ষম হবেনB.py


সংক্ষিপ্তসার: প্রথম ক্ষেত্রে ফাইলটি A.pyএমন একটি মডিউল যা আপনি ফাইলটিতে আমদানি করেন B.py, আপনি সিনট্যাক্সটি ব্যবহার করেছেন import module_name। দ্বিতীয় ক্ষেত্রে, folderপ্যাকেজটিতে মডিউল রয়েছে A.py, আপনি সিনট্যাক্সটি ব্যবহার করেছেন import package_name.module_name

প্যাকেজ এবং মডিউল সম্পর্কে আরও তথ্যের জন্য, এই লিঙ্কটি পরামর্শ করুন


আমি কিছুটা ভিন্নতা দিয়ে চেষ্টা করেছি এবং এটি কার্যকর হয়েছে। from folder_a.script import *স্ক্রিপ্ট.পিএ ফোল্ডারের নীচে।
জাস্টিন

+1 এটি আমি খুঁজছিলাম। অন্যান্য উত্তরগুলি বুঝতে পারি নি তবে আপনি ডিরেক্টরিটি ব্যবহার করে এটি ব্যাখ্যা করেছেন।
কালো থান্ডার

আমি যদি প্যারেন্ট ডিরেক্টরিতে থাকা একটি পাই ফাইলটি আমদানি করতে চাই তবে কী হবে?
বাইটেডেভ

1
@ বাইটেডেভ অ্যাড করুন import sysএবং sys.path.append("..")ফাইলের শুরুতে। এটি অনুসারে: স্ট্যাকওভারফ্লো . com / a / 48341902 / 6057480 । পরীক্ষিত, পুরোপুরি কাজ করে, এটি করার পরে, আপনি প্যারেন্ট ডিরেক্টরিতে একটি পাই ফাইল আমদানি করতে সক্ষম হবেন এবং এখনও একই ডিরেক্টরি এবং উপ ডিরেক্টরিতে পাই ফাইল আমদানি করতে সক্ষম হবেন।
বোহাও এলআই

17
from file import function_name  ######## Importing specific function
function_name()                 ######## Calling function

এবং

import file              ######## Importing whole package
file.function1_name()    ######## Calling function
file.function2_name()    ######## Calling function

আমি এখনই বুঝতে পেরেছি এমন দুটি সহজ উপায় এবং নিশ্চিত করে নিন যে আপনার "ফাইল.পি" ফাইলটি যা আপনি একটি লাইব্রেরী হিসাবে আমদানি করতে চান তা কেবল আপনার বর্তমান ডিরেক্টরিতে উপস্থিত রয়েছে।


9

যদি সংজ্ঞায়িত ফাংশনটি কোনও ফাইলে থাকে x.py:

def greet():
    print('Hello! How are you?')

আপনি যে ফাংশনটি আমদানি করছেন সেই ফাইলটিতে, এটি লিখুন:

from x import greet

আপনি যদি কোনও ফাইলে সমস্ত ফাংশন আমদানি করতে না চান তবে এটি কার্যকর।


7

.py ফাইলগুলি আমদানির সর্বোত্তম উপায় হ'ল উপায় __init__.py। সবচেয়ে সহজ কাজটি হ'ল __init__.pyএকই ডিরেক্টরিতে আপনার খালি ফাইলটি অবস্থিত একটি খালি ফাইল তৈরি করা ।

মাইকের গ্রুপি এই পোস্টটি__init__.py পাইথন প্যাকেজ তৈরি, আমদানি, এবং সেট আপ করার জন্য এর দুর্দান্ত ব্যাখ্যা এবং এর ব্যবহার।


1
@ ঘোস্টগেট আমি আমার প্রতিক্রিয়া আপডেট করেছি। "এটি আরও ভাল হবে" লিঙ্কটির জন্য ধন্যবাদ।
সুপ্রিম

এবং বুঝুন যে সবাই আপনার টাইমজোনটিতে বাস করছে না।
ঘোস্টগেট

4
আপনার মাইক গ্রুপির পোস্টের বিষয়বস্তু পোস্ট করা উচিত ছিল, বিশেষত লিঙ্কটি এখন ৪০৪ এর দশকের পরে। web.archive.org/web/20190309045451/https://mikegrouchy.com/blog/…
Qwr

6

আমি কীভাবে আমদানি করব তা ফাইলটি আমদানি করে এবং এর নামের শর্টহ্যান্ড ব্যবহার করে।

import DoStuff.py as DS
DS.main()

ভুলবেন না যে, আপনার আমদানি ফাইল করা আবশ্যক .py এক্সটেনশানের সঙ্গে নামে


3
থেকে import DoStuff.py as DSআমদানির চেষ্টা করবেন না ? pyDoStuff
বেনজ

5

আমি এই নোটটি যুক্ত করতে চাই আমি খুব স্পষ্টভাবে অন্য কোথাও নেই; মডিউল / প্যাকেজের ভিতরে ফাইল থেকে লোড করার সময় মডিউল / প্যাকেজের নামটি অবশ্যই প্রিফিক্স করা উচিত mymodulemymoduleএরকম লেআউট হওয়ার বিষয়টি কল্পনা করুন :

/main.py
/mymodule
    /__init__.py
    /somefile.py
    /otherstuff.py

সামগ্রীগুলি লোড করার সময় somefile.py/ otherstuff.pyথেকে __init__.pyএগুলি দেখতে পাওয়া উচিত:

from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc

2

আপনি যে মডিউলটি আমদানি করতে চান তা কোনও উপ-ডিরেক্টরিতে না থাকলে নিম্নলিখিত বিষয়গুলি চেষ্টা করুন এবং app.pyগভীরতম সাধারণ অভিভাবক ডিরেক্টরি থেকে চালান :

ডিরেক্টরি কাঠামো:

/path/to/common_dir/module/file.py
/path/to/common_dir/application/app.py
/path/to/common_dir/application/subpath/config.json

ইন app.py, ক্লায়েন্টের sys.path এর পথ সংযুক্ত করুন:

import os, sys, inspect

sys.path.append(os.getcwd())
from module.file import MyClass
instance = MyClass()

Alচ্ছিক (যদি আপনি উদাহরণস্বরূপ কনফিগারেশন লোড করেন) (আমার ব্যবহারের ক্ষেত্রে পরিদর্শন করা সবচেয়ে শক্তিশালী বলে মনে হয়)

# Get dirname from inspect module
filename = inspect.getframeinfo(inspect.currentframe()).filename
dirname = os.path.dirname(os.path.abspath(filename))
MY_CONFIG = os.path.join(dirname, "subpath/config.json")

চালান

user@host:/path/to/common_dir$ python3 application/app.py

এই সমাধানটি ক্লাইমে, পাশাপাশি পাইচার্মেও আমার জন্য কাজ করে।


2

আপনার পাইথন স্ক্রিপ্টকে abc.py নামের সাথে যুক্ত করার কয়েকটি উপায় রয়েছে

  1. উদাহরণস্বরূপ, যদি আপনার ফাইলটিকে abc.py বলা হয় (আমদানি করা এবিসি) সীমাবদ্ধতা হ'ল আপনার ফাইলটি একই স্থানে উপস্থিত হওয়া উচিত যেখানে আপনার কলিং পাইথন স্ক্রিপ্ট রয়েছে।

আমদানি ABC

  1. উদাহরণস্বরূপ যদি আপনার অজগর ফাইলটি উইন্ডোজ ফোল্ডারের ভিতরে থাকে। উইন্ডোজ ফোল্ডারটি একই স্থানে উপস্থিত রয়েছে যেখানে আপনার কলিং পাইথন স্ক্রিপ্ট রয়েছে।

ফোল্ডার আমদানি থেকে abc

  1. অন্তর্ভুক্ত abc.py স্ক্রিপ্টটি অভ্যন্তরীণ অভ্যন্তরীণ_ফোল্ডারটি উপলব্ধ যা ফোল্ডারের অভ্যন্তরে উপস্থিত

ফোল্ডার.ইনটার্নাল_ফোল্ডার আমদানি অ্যাবসি থেকে

  1. উপরে জেমস দ্বারা উত্তর হিসাবে, আপনার ফাইল কিছু নির্দিষ্ট স্থানে থাকলে

আমদানি OS
আমদানি sys
scriptpath = "../Test/MyModule.py"
sys.path.append (os.path.abspath (scriptpath))
আমদানি MyModule

আপনার অজগর স্ক্রিপ্টটি আপডেট হয়ে যায় এবং আপনি আপলোড করতে চান না - অটো রিফ্রেশের জন্য এই বিবৃতিগুলি ব্যবহার করুন। বোনাস :)

%load_ext autoreload 
%autoreload 2

1

অন্য পাইথন ফাইলে কেবল পাইথন ফাইল আমদানি করতে

আসুন বলতে পারি যে আমার কাছে হেলপার.পিপি পাইথন ফাইল রয়েছে যার মতো ডিসপ্লে ফাংশন রয়েছে,

def display():
    print("I'm working sundar gsv")

এখন app.py এ , আপনি প্রদর্শন ফাংশনটি ব্যবহার করতে পারেন,

import helper
helper.display()

আউটপুট,

I'm working sundar gsv

দ্রষ্টব্য: .py এক্সটেনশন নির্দিষ্ট করার দরকার নেই।


1

এটি পাগল মনে হতে পারে তবে আপনি কেবলমাত্র একটি র‍্যাপার স্ক্রিপ্ট তৈরি করে থাকলে আপনি যে ফাইলটি আমদানি করতে চান তার কেবল একটি প্রতীকী লিঙ্ক তৈরি করতে পারেন।


1

আপনি এটি করতে পারেন: from filename import something

উদাহরণ: from client import Client নোট করুন যে আপনার .py .pyw .pyuiএক্সটেনশনটির দরকার নেই ।


1

পাইথন ফাইল থেকে কোনও ফাংশন কল করতে আমি এইভাবে করেছি, যে কোনও ফাংশন কল করার ক্ষেত্রে এটি আমার জন্য নমনীয়।

import os, importlib, sys

def callfunc(myfile, myfunc, *args):
    pathname, filename = os.path.split(myfile)
    sys.path.append(os.path.abspath(pathname))
    modname = os.path.splitext(filename)[0]
    mymod = importlib.import_module(modname)
    result = getattr(mymod, myfunc)(*args)
    return result

result = callfunc("pathto/myfile.py", "myfunc", arg1, arg2)

সরাসরি ফাংশনটি ব্যবহার করার চেয়ে কীভাবে একটি নতুন ফাংশন তৈরি করা যায়?
Qwr

@qwr নতুন ফাংশন কলফুঙ্ক () কেবলমাত্র পাইথন ফাইলে লক্ষ্য ফাংশনটিকে গতিশীলভাবে কল করার জন্য কোডটির একটি মোড়ক। প্রদত্ত উদাহরণটি পাইথন ফাইল "প্যাথো / মাইফাইল.পি" এর লক্ষ্য "মাইফাঙ্ক"। "সরাসরি ফাংশনটি ব্যবহার করে" বলতে কী বোঝ?
জিয়াও-ফেং লি

আমার জন্য নিখুঁতভাবে কাজ করেছেন। আমার উদাহরণে, আমি প্রতিস্থাপন করেছি: from mypath import Pathসহ Path = callfunc("/folder/to/mypath.py", "Path")। ধন্যবাদ @ জিয়াও-ফেংলি
ইউজার 319436

@ ব্যবহারকারী319436 আমার উত্তর খুশী হ'ল শেষ পর্যন্ত কাউকে সহায়তা করে। :)
জিয়াও-ফেং লি

ধন্যবাদ @ জিয়াও-ফেং-লি !! দুর্দান্ত উত্তর !!
আলটিয়ার্স ডি ম্যাটোস

0

উপরে তালিকাভুক্ত হিসাবে অনেকগুলি উপায় রয়েছে তবে আমি দেখতে পেয়েছি যে আমি কেবল একটি ফাইলের বিষয়বস্তু আমদানি করতে চাই এবং লাইন এবং লাইন লিখতে চাই না এবং অন্য মডিউলগুলি আমদানি করতে হয় । সুতরাং, আমি কোনও ফাইলের বিষয়বস্তু পাওয়ার উপায় নিয়ে এসেছি, এমনকি বিন্দু সিনট্যাক্স ( file.property) দিয়েও আপনার সাথে আমদানিকৃত ফাইলটি মার্জ করার পক্ষে নয়।
প্রথমত, আমার ফাইলটি এখানে আমদানি করব,data.py

    testString= "A string literal to import and test with"


দ্রষ্টব্য: আপনি .txtপরিবর্তে এক্সটেনশনটি ব্যবহার করতে পারেন ।
ইন mainfile.py, বিষয়বস্তু খোলার এবং পেয়ে শুরু করুন।

    #!usr/bin/env python3
    Data=open('data.txt','r+').read()

এখন আপনার কাছে স্ট্রিং হিসাবে বিষয়বস্তু রয়েছে, তবে অ্যাক্সেসের চেষ্টা করা ক্লাসের উদাহরণ data.testStringহিসাবে dataযেমন একটি ত্রুটি ঘটাবে strএবং এর কোনও সম্পত্তি থাকলেও এটি testStringআপনার প্রত্যাশা অনুযায়ী করবে না।
এর পরে, একটি ক্লাস তৈরি করুন। উদাহরণস্বরূপ (পাং উদ্দেশ্যে),ImportedFile

    class ImportedFile:

এবং এটি এতে প্রবেশ করুন (উপযুক্ত উত্সাহ সহ):

    exec(data)


এবং অবশেষে, এর মতো পুনরায় নিয়োগ করুন data:

    data=ImportedFile()

এবং এটাই! অন্য যে কোনও মডিউলটির মতো আপনি যেমন অ্যাক্সেস করেন ঠিক তেমন টাইপিং print(data.testString)কনসোলে প্রিন্ট হবে A string literal to import and test with
তবে, আপনি সমতুল্য চান from mod import *শুধু বর্গ, উদাহরণস্বরূপ নিয়োগ, এবং ডি গর্ত ড্রপ exec

আশা করি এটি সাহায্য করবে :)-
বেঞ্জি


আপনি গুরুত্ব সহকারে ভাবেন যে ফাইলটির বিষয়বস্তুগুলি স্ট্রিং হিসাবে পড়া এবং তারপরে এটি কার্যকর করা একটি ভাল সমাধান যখন আমাদের অন্যান্য সমস্ত সমাধান লোকেরা পোস্ট করে থাকে?
Qwr

@Qwr এরম হ্যাঁ, আমি করি do অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি কিছু পরিস্থিতিতে কাজ করে না। যে কারণে আমার একটি সহজ উপায়ের দরকার ছিল যা কাজের গ্যারান্টিযুক্ত ছিল। আপনি যদি অনার্স দৃষ্টিকোণ থেকে জিনিসগুলি দেখতে অক্ষম হন তবে আপনাকে অফিসিয়াল আইডিএল ব্যবহার করার চেষ্টা করতে হবে।
বেঞ্জ

0

পাইথনের একটি খুব অজানা বৈশিষ্ট্য হ'ল আমদানি করার ক্ষমতা zip ফাইলগুলি :

library.zip
|-library
|--__init__.py

ফাইল __init__.pyপ্যাকেজের নিম্নলিখিত রয়েছে:

def dummy():
    print 'Testing things out...'

আমরা অন্য স্ক্রিপ্ট লিখতে পারি যা জিপ সংরক্ষণাগার থেকে প্যাকেজ আমদানি করতে পারে। Sys.path- এ জিপ ফাইল যুক্ত করা কেবলমাত্র প্রয়োজনীয়।

import sys
sys.path.append(r'library.zip')

import library

def run():
    library.dummy()

run()

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