अन्य पायथन फ़ाइलों को कैसे आयात करें?


796

मैं पायथन में अन्य फ़ाइलों को कैसे आयात करूं?

  1. मैं वास्तव में एक विशिष्ट अजगर फ़ाइल को कैसे आयात कर सकता हूं import file.py?
  2. मैं एक विशिष्ट फ़ाइल के बजाय एक फ़ोल्डर कैसे आयात कर सकता हूं?
  3. मैं उपयोगकर्ता इनपुट के आधार पर गतिशील रूप से पायथन फ़ाइल लोड करना चाहता हूं।
  4. मैं जानना चाहता हूं कि फ़ाइल से सिर्फ एक विशिष्ट भाग को कैसे लोड किया जाए।

उदाहरण के लिए, main.pyमेरे पास:

from extra import * 

हालाँकि यह मुझे सभी परिभाषाएँ देता है extra.py, जब शायद मैं चाहता हूँ कि एक ही परिभाषा है:

def gap():
    print
    print

क्या मैं करने के लिए जोड़ सकता हूँ importसिर्फ पाने के लिए बयान gapसे extra.py?


इसे भी देखें: stackoverflow.com/questions/8663076/…
dreftymac

जवाबों:


442

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
यदि आप init .py import filenameको जोड़ते हैं तो आप मॉड्यूल को सीधे फ़ोल्डर नाम के रूप में आयात कर सकते हैं।
कॉर्नस्मिथ

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मेरे लिए ठीक काम करता है, पायथन 3.4.8 के साथ।
एलेक्स हॉल

7
क्या यह 2019 में अभी भी सटीक है? यह python3 या 2 है?
सैंडबर्ग

1030

एक अजगर फ़ाइल आयात करने के कई तरीके हैं, सभी उनके पेशेवरों और विपक्षों के साथ।

बस जल्दबाजी में पहली आयात रणनीति न चुनें जो आपके लिए काम करती है या फिर आपको बाद में कोडबेस को फिर से लिखना होगा जब आप पाएंगे कि यह आपकी आवश्यकताओं को पूरा नहीं करता है।

मैं सबसे आसान उदाहरण # 1 की व्याख्या करना शुरू करूंगा, फिर मैं सबसे अधिक पेशेवर और मजबूत उदाहरण # 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()से अजगर समारोह को आमंत्रित किया।

उदाहरण 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 से आयात किया गया था और इसे main.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?

    यदि आपने chekov.py में अन्य फ़ंक्शन निर्धारित किए हैं, तो वे तब तक उपलब्ध नहीं होंगे जब तक कि आप नहीं import *

उदाहरण 4, आयात raa.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, अजगर के माध्यम से अपनी फ़ाइल आयात करें

अद्यतन: यह उदाहरण python2 और 3 दोनों के लिए काम करता था, लेकिन अब केवल python2 के लिए काम करता है। python3 को इस उपयोगकर्ता स्टार्टअपहुक फीचर सेट से छुटकारा मिल गया क्योंकि यह कम-कौशल पायथन पुस्तकालय लेखकों द्वारा दुर्व्यवहार किया गया था, इसका उपयोग सभी उपयोगकर्ता-परिभाषित कार्यक्रमों से पहले उनके कोड को वैश्विक नामस्थान में इंजेक्ट करने के लिए किया गया था। यदि आप चाहते हैं कि यह python3 के लिए काम करे, तो आपको अधिक रचनात्मक बनना होगा। अगर मैं आपको बताता हूं कि यह कैसे करना है, तो अजगर डेवलपर्स उस सुविधा को सेट के रूप में भी अक्षम कर देंगे, इसलिए आप अपने दम पर हैं।

देखें: 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 )

इस कोड को अपने main.py (कहीं भी हो सकता है) में रखें:

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'तो इसका मतलब है कि आप python3 का उपयोग कर रहे हैं, स्टार्टअपहूक को डिफ़ॉल्ट रूप से अक्षम किया गया है।

इस जिस्ट के लिए श्रेय जाता है: https://github.com/docwhat/homedir-examples/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 / झुंड / derp बनाओ

  5. Derp के तहत, एक और __init__.pyफाइल बनाएं :

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
  6. के तहत / घर / एल / foo5 / herp / derp एक नई फ़ाइल बनाने के लिए कहा जाता है 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)। वैसे भी अद्भुत गाइड
oriadam

4
जब भी मेरे पास एक आयात मुद्दा होता है तो मैं इस सवाल का अंत करता हूं और हमेशा अपनी समस्या को हल करने में सक्षम होता हूं। अगर मैं हर बार आपकी मदद कर सकता हूं, तो मैं करूंगा।
dgBP

4
इन सभी के बीच क्या बड़ा अंतर है, और कोई किसी से बेहतर क्यों है? उदाहरण के लिए 5, आप "आयात फ़ाइलों को अजगर में नंगे आयात कमांड के साथ" लिखते हैं, लेकिन आप उदाहरण 1, 3 और 4 में आयात (नंगे?) आयात करते हैं, है न?
HelloGoodbye

34
अच्छा जवाब लेकिन यह तथ्य कि आप एक अलग आयात फ़ाइल का उपयोग करते हैं उदाहरण के लिए हर समय यह पढ़ने के लिए बोझिल हो जाता है।
gent

2
मैं इस बात पर जोर देना चाहूंगा कि भले ही आप विंडोज पर काम करते हों, आयात संवेदनशील है। इसलिए आपके पास मॉड्यूल्डहोम नहीं हो सकता है और आपके कोड आयात मॉड्यूल में है
radato

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

आप इसे फ़ाइल B में कर सकते हैं:

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 *Script.py फ़ोल्डर के अंतर्गत है a।
जस्टिन

+1 यह वही है जिसकी मुझे तलाश थी। अन्य उत्तरों को समझ नहीं सका, लेकिन आपने इसे निर्देशिकाओं का उपयोग करके समझाया।
ब्लैक थंडर

क्या होगा यदि मैं एक py फ़ाइल आयात करना चाहता हूं जो मूल निर्देशिका में है?
बट्टेदेव

1
@bytedev जोड़ें import sysऔर sys.path.append("..")फ़ाइल की शुरुआत में। : करने के लिए इस अनुसार stackoverflow.com/a/48341902/6057480 । परीक्षण किया गया, पूरी तरह से काम करते हुए, ऐसा करने के बाद, आप मूल निर्देशिका में py फ़ाइल आयात करने में सक्षम होंगे और फिर भी समान निर्देशिका और उप-निर्देशिकाओं में py फ़ाइलों को आयात करने में सक्षम होंगे।
बोहो लिआ

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
@GhostCat मैंने अपनी प्रतिक्रिया अपडेट कर दी है। लिंक के लिए धन्यवाद "यह बेहतर होगा"।
सर्वोच्च

और समझें कि हर कोई आपके समयक्षेत्र में नहीं रह रहा है।
घोस्टकट

4
आपको माइक ग्राउची के पोस्ट की सामग्री को पोस्ट करना चाहिए, खासकर लिंक के बाद से अब 404s। 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आयात करने का प्रयास pyसे DoStuff?
बेंज

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()

वैकल्पिक (यदि आप उदाहरण के लिए लोड करते हैं) (निरीक्षण मेरे उपयोग के मामलों के लिए सबसे मजबूत लगता है)

# 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")

Daud

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

यह समाधान मेरे लिए cli, साथ ही PyCharm में काम करता है।


2

आपके अजगर स्क्रिप्ट को abc.py नाम के साथ शामिल करने के कुछ तरीके हैं

  1. उदाहरण के लिए यदि आपकी फ़ाइल को abc.py (import abc) कहा जाता है, तो सीमा यह है कि आपकी फ़ाइल उसी स्थान पर मौजूद होनी चाहिए जहाँ आपकी कॉलिंग पाइथन स्क्रिप्ट है।

आयात एबीसी

  1. जैसे अगर आपकी अजगर फाइल विंडोज फोल्डर के अंदर है। विंडोज फोल्डर उसी स्थान पर मौजूद है जहां आपकी कॉलिंग पाइथन स्क्रिप्ट है।

फ़ोल्डर आयात से एबीसी

  1. Incase abc.py स्क्रिप्ट उपलब्ध अंदरूनी सूत्र_ फ़ोल्डर है जो फ़ोल्डर के अंदर मौजूद है

folder.internal_folder आयात एबीसी से

  1. जैसा कि ऊपर जेम्स द्वारा उत्तर दिया गया है, यदि आपकी फ़ाइल किसी निश्चित स्थान पर है

आयात os
आयात sys
scriptpath = "../Test/MyModule.py"
sys.path.append (os.path.abspath (scriptpath))
आयात MyModule

यदि आपकी पाइथन स्क्रिप्ट अपडेट हो जाती है और आप ऑटो रिफ्रेश के लिए इन कथनों को अपलोड नहीं करना चाहते हैं। बक्शीश :)

%load_ext autoreload 
%autoreload 2

1

बस एक और अजगर फ़ाइल में अजगर फ़ाइल आयात करने के लिए

मान लें कि मेरे पास helper.py python फाइल है जिसमें डिस्प्ले फंक्शन है,

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 नया फ़ंक्शन कॉलफंक () डायनामिक रूप से अजगर फ़ाइल में लक्ष्य फ़ंक्शन को कॉल करने के लिए कोड का एक आवरण है। दिया गया उदाहरण पायथन फ़ाइल "pathto / myfile.py" में "myfunc" का लक्ष्य है। "सीधे फ़ंक्शन का उपयोग करने" से आपका क्या मतलब है?
जिओ-फेंग ली

मेरे लिए पूरी तरह से काम किया। मेरे उदाहरण में, मैंने प्रतिस्थापित किया: from mypath import Pathसाथ Path = callfunc("/folder/to/mypath.py", "Path")। धन्यवाद @ जिओ-फ़ेंगली
user319436

@ user319436 मुझे खुशी है कि मेरा जवाब आखिरकार किसी की मदद करता है। :)
जिओ-फेंग ली

धन्यवाद @ जिओ-फ़ेंग-ली !! बहुत बढ़िया जवाब!!
Altieres de Matos

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 Erm हां, मैं करता हूं। अन्य जवाबों में से कुछ कुछ स्थितियों में काम नहीं करते हैं। यही कारण है कि मुझे काम करने की गारंटी देने के लिए एक आसान तरीका चाहिए था। यदि आप बच्चों को देखने के दृष्टिकोण से अक्षम हैं, तो आपको आधिकारिक आईडीएलई का उपयोग करने की कोशिश करनी चाहिए।
बेंज

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