在.py文件中使用.py文件

时间:2018-06-12 05:05:03

标签: python jupyter-notebook

我对python很新,而且我一直专门使用Jupyter笔记本。当我需要运行.py文件时,我已经在计算机中保存了一些我通常所做的只是使用魔术命令%run

%run '/home/cody/.../Chapter 3/efld.py'
%run '/home/cody/.../Chapter 5/tan_vec.py'

然后在下一个单元格中,我可以毫无问题地运行efld.py。但tan_vec.py使用efld.py,看起来像这样,

def tan_vec(r):
    import numpy as np
    #Finds the tangent vector to the electric field at point 'r'
    e = efld(r)
    e = np.array(e) #Turn 'e' into a numpy array so I can do math with it a little easier.
    emag = np.sqrt(sum(e**2)) #Magnitude of the 
    return e / emag

当我尝试运行时,我收到了错误;

"NameError: name 'efld' is not defined."

我尝试了大部分事情here,但没有一个接缝工作。

我是否打算在笔记本中运行py文件错误?有没有更好的方法在笔记本中运行/调用py文件? 如何使我能在另一个py文件中运行一个py文件?

修改

谢谢大家的帮助!我只是想添加最终的代码,以防万一有人遇到这个问题,并希望看到我做了什么。

def tan_vec(r):
    #import sys
    #sys.path.insert(0, '/home/cody/Physics 331/Textbook Programs/Chapter 3')
    from efld import efld 
    import numpy as np
    #Finds the tangent vector to the electric field at point 'r'
    e = efld(r)
    e = np.array(e) #Turn 'e' into a numpy array so I can do math with it a little easier.
    emag = np.sqrt(sum(e**2)) #Magnitude of the 
    return e / emag

前两行已注释掉,因为仅当efld.py和tan_vec.py保存在不同的文件夹中时才需要它们。我刚刚将efld的副本添加到同一个文件夹和tan_vec中,我不再需要它们了。

再次感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

将文件放在jupyter根目录中。然后只需在第一个单元格的顶部导入这些文件(现在称为模块):

from efld import *
from tan_vec import *

如果需要另一个,请将导入放在相应文件的顶部,而不是jupyter。

鉴于这些模块本身不会抛出任何异常,您可以在所有其他单元格中调用其中的所有函数。

e = efld(r)

注意两个文件中的所有功能都以不同方式命名。

修改: 正如下面的评论中所指出的,您还可以直接导入您的功能:

from efld import efld as <whatever>

通过这种方式,您可以将功能重命名为<whatever>,并且不必重命名名称相同的功能,位于不同的模块/文件中。