2016-10-02 2 views
1

Итак, у меня есть два питона файла:Как импортировать скрипты в виде модулей в ipyhon?

1-й "m12345.py"

def my(): 
    return 'hello world' 

2-й "1234.py":

from m12345 import * 
a = m12345.my() 
print(a) 

На IPython я стараюсь EXEC такие CMDS:

exec(open("f:\\temp\\m12345.py").read()) 
exec(open("f:\\temp\\1234.py").read()) 

ошибка для 2-й команды:

ImportError: No module named 'm12345' 

Пожалуйста, помогите, как добавить 1-й файл в качестве модуля для второго?

ответ

1

Вам необходимо создать новый модуль (например, m12345), вызвав m12345 = imp.new_module('m12345'), а затем выполнить скрипт python в этом модуле, вызвав exec(open('path/m12345.py').read(), m12345.__dict__). Смотрите пример ниже:

import imp 
pyfile = open('path/m12345.py').read() 
m12345 = imp.new_module('m12345') 
exec(pyfile, m12345.__dict__) 

Если вы хотите, чтобы модуль быть в системном пути, вы можете добавить

sys.modules['m12345'] = m12345 

После этого вы можете сделать

import m12345 

или

from m12345 import * 
+0

'm12345 = imp.new_module ('m12345') импорт имп module_name = 'm12345' pyfile = открыт ('C: \\ Temp \\ m12345.py'). Чтения() модуль = имп. new_module (имя_модуля) exec (pyfile, module .__ dict__) exec (открыть ('f: \\ temp \\ m12345.py').read(), m12345 .__ dict__) exec (открыть ("f: \\ temp \\ a1234.py"). read()) ImportError: Нет модуля с именем 'm12345'' – Leo

+0

oops .. изменить это 'm12345 = imp.new_module (module_name) ' см. отредактированный код. Я отредактировал его - теперь он должен работать. –

+0

спасибо! начать работать! – Leo

2

Прежде всего, если вы используете универсальный импорт (from m12345 import *), то вы просто вызовите функцию my() а не m12345.my(), иначе вы получите

NameError: name 'm12345' is not defined

Во-вторых, вы должны добавить следующий фрагмент кода в любом сценарии, в которых вы хотите, чтобы иметь возможность непосредственно запустить его или нет (при импорте).

if "__name__" = "__main__": 
    pass 

PS. Добавьте это в 1-й скрипт («m12345.py»). PS2. Избегайте использования универсального метода импорта, поскольку он имеет возможность испортить пространство имен вашего скрипта. (По этой причине это не считается лучшей практикой).

Редактировать: Является ли m12345.py находящейся в папке python (где она была установлена ​​на вашем жестком диске)? Если нет, то вы должны добавить каталог он находится в sys.path с:

import sys 
sys.path.append(directory) 

где каталогом является строкой места, где находится ваш m12345.py. Обратите внимание: если вы используете Windows, вы должны использовать /, а не \. Однако было бы проще просто переместить сценарий (если это возможно).

+0

спасибо за советы , к сожалению, не помогло, эта же проблема появляется – Leo

+0

@Leo перечитывает ответ, потому что я добавил что-то, что может помочь после того, как я увижу ваш комментарий. – geo1230

+0

yep, путем добавления к пути проблемы была решена – Leo

Смежные вопросы