Использование файла .py внутри файла .py - PullRequest
0 голосов
/ 12 июня 2018

Я довольно плохо знаком с 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."

Я пытался большинство вещей здесь но ни один из них не сработал.

Я неправильно запустил 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 голосов
/ 12 июня 2018

поместите файлы в корневой каталог jupyter.затем просто импортируйте эти файлы (теперь они называются модулями) в верхней части вашей первой ячейки:

from efld import *
from tan_vec import *

Если один требует другого, поместите импорт сверху в соответствующий файл, а не в jupyter.

Учитывая, что эти модули не генерируют никаких исключений внутри себя, вы можете затем вызывать все функции в нем во всех других ячейках.

e = efld(r)

Обратите внимание, что все функции в обоих файлахназван по-другому.


Редактировать : Как указано в комментариях ниже, вы также можете напрямую импортировать свои функции:

from efld import efld as <whatever>

Таким образом, вы можете переименовать вашработает на <whatever> и не требует переименования имен с одинаковыми именами, находящихся в разных модулях / файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...