2017-02-10 6 views
10

मैं एक पायथन नोटबुक पर काम कर रहा हूं और मुझे लगता है कि बड़ा इनपुट कोड [इनपुट]एक [* .PY] फ़ाइलों में पैक करें और नोटबुक से इन फ़ाइलों को कॉल करें।Jupyter नोटबुक पर * .IPYNB फ़ाइल से * .PY फ़ाइल निष्पादित करने के लिए कैसे करें?

नोटबुक से एक [.PY] फ़ाइल चलाने की क्रिया मुझे ज्ञात है और आदेश लिनक्स या विंडोज के बीच भिन्न होता है। लेकिन जब मैं इस कार्रवाई करते हैं और नोटबुक से [.py] फ़ाइल निष्पादित, यह किसी भी मौजूदा पुस्तकालय या चर नोटबुक में लोड नहीं पहचानता है (यह शून्य से [ .py] फ़ाइल शुरू की तरह है ...)

तो इसे ठीक करने कोई तरीका है?

समस्या का एक संभावित सरल उदाहरण निम्नलिखित होगा:

In[1]: 
import numpy as np 
import matplotlib.pyplot as plt 

In[2]: 
def f(x): 
    return np.exp(-x ** 2) 

In[3]: 
x = np.linspace(-1, 3, 100) 

In[4]: 
%run script.py 

कहाँ "script.py" निम्नलिखित सामग्री है:

plt.plot(x, f(x)) 
plt.xlabel("Eje $x$",fontsize=16) 
plt.ylabel("$f(x)$",fontsize=16) 
plt.title("Funcion $f(x)$") 
  • वास्तविक समस्या में, फ़ाइल [* .PY] में कोड की 4 पंक्तियां नहीं हैं, इसमें पर्याप्त कुछ है।
+0

आपका 'x' चर अपने' .ipynb' फाइल करने के लिए स्थानीय है, * नहीं * आपकी '.py' फ़ाइल। '.py' फ़ाइल को 'x' के बारे में कोई जानकारी नहीं है। स्क्रिप्ट के बीच उस मान को पारित करने का एक तरीका खोजें। 'Myfile.ipynb आयात x' से कुछ' (पता नहीं है कि आप '.ipynb' फ़ाइलों के साथ उस प्रकार के आयात कर सकते हैं, लेकिन क्या आप देखते हैं कि मेरा क्या मतलब है? – blacksite

+0

आपके उत्तर के लिए धन्यवाद। मैं क्या चाहता हूं नोटबुक बहुत भारी कोडित नहीं है ... – JMSH

उत्तर

12

में %run magic documentation आप पा सकते हैं:

मैं एक के बजाय IPython का नाम स्थान में फ़ाइल को चलाने खाली एक यह उपयोगी है यदि आप टेक्स्ट एडिटर में लिखे गए कोड के साथ प्रयोग कर रहे हैं जो इंटरैक्टिव रूप से परिभाषित चर पर निर्भर करता है।

इसलिए, -i आपूर्ति काम कर देता है:

%run -i 'script.py' 

"सही" जिस तरह से यह

हो सकता है कि आदेश ऊपर तुम सिर्फ क्या जरूरत है ऐसा करने के लिए, लेकिन साथ इस सवाल पर ध्यान देने के लिए, मैंने उन लोगों के लिए कुछ और सेंट जोड़ने का फैसला किया जो नहीं जानते कि एक और पाइथोनिक तरीका कैसा दिखता है।
ऊपर समाधान एक छोटे से hacky है, और भ्रमित अन्य फ़ाइल में कोड बनाता है (जहां इस x चर से आती है? और क्या f समारोह है?)।

मैं तुम्हें दिखाता कैसे वास्तव में बार बार अन्य फ़ाइल निष्पादित करने के लिए बिना यह करने के लिए करना चाहते हैं।
बस इसे अपने स्वयं के कार्यों और कक्षाओं के साथ एक मॉड्यूल में बदलें और फिर इसे अपनी जुपीटर नोटबुक या कंसोल से आयात करें। इसका आसानी से इसे पुन: प्रयोज्य बनाने का लाभ भी है और ज्यूपिटर कॉन्टेसिस्टेंटेंट आपको स्वत: पूर्णता में मदद कर सकता है या आपको लिखने पर डॉकस्ट्रिंग दिखा सकता है।
आप लगातार अन्य फ़ाइल को संपादित कर रहे हैं, तो autoreload आपकी मदद के लिए आता है।

आपका उदाहरण इस प्रकार दिखाई देगा:

import matplotlib.pyplot as plt 

def myplot(f, x): 
    """ 
    :param f: function to plot 
    :type f: callable 
    :param x: values for x 
    :type x: list or ndarray 

    Plots the function f(x). 
    """ 
    # yes, you can pass functions around as if 
    # they were ordinary variables (they are) 
    plt.plot(x, f(x)) 
    plt.xlabel("Eje $x$",fontsize=16) 
    plt.ylabel("$f(x)$",fontsize=16) 
    plt.title("Funcion $f(x)$") 

Jupyter सांत्वना
script.py

In [1]: import numpy as np 

In [2]: %load_ext autoreload 

In [3]: %autoreload 1 

In [4]: %aimport script 

In [5]: def f(x): 
     :  return np.exp(-x ** 2) 
     : 
     : 

In [6]: x = np.linspace(-1, 3, 100) 

In [7]: script.myplot(f, x) 

In [8]: ?script.myplot 
Signature: script.myplot(f, x) 
Docstring: 
:param f: function to plot 
:type f: callable 
:param x: x values 
:type x: list or ndarray 
File:  [...]\script.py 
Type:  function 
1

हो सकता है कि बहुत ही सुंदर नहीं है, लेकिन यह काम करता है:

exec(open("script.py").read()) 
संबंधित मुद्दे