Как перезагрузить модуль Python в IDLE? - PullRequest
11 голосов
/ 04 июня 2011

Я пытаюсь понять, как мой рабочий процесс может работать с Python и IDLE.

Предположим, я пишу функцию:

def hello():
    print 'hello!'

Я сохраняю файл как greetings.py.Затем в IDLE я проверяю функцию:

>>> from greetings import *
>>> hello()
hello!

Затем я изменяю программу и хочу попробовать hello() еще раз.Итак, я reload:

>>> reload(greetings)
<module 'greetings' from '/path/to/file/greetings.py'>

И все же изменения не заметны.Что я делаю неправильно?Как перезагрузить измененный модуль?

Я читал ряд связанных вопросов по SO, но ни один из ответов не помог мне.

Ответы [ 4 ]

12 голосов
/ 04 июня 2011

Вам нужно повторить эту строку:

>>> from greetings import *

после того, как вы

>>> reload(greetings)

Причина, по которой просто перезагрузка модуля не работает, заключается в том, что * фактически импортировал все внутри модуля, поэтому вам необходимо перезагрузить их по отдельности. Если вы сделаете следующее, то все будет работать так, как вы ожидаете:

>>> import greetings
>>> greetings.hello()
hello!

Внести изменения в файл

>>> reload(greetings)
<module 'greetings' from 'greetings.py'>
>>> greetings.hello()
world!
5 голосов
/ 04 июня 2011

Вот что я получу, когда попробую ваш пример (из свежей интерактивной сессии Python):

>>> from greetings import *
>>> reload(greetings)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'greetings' is not defined

Это указывает на источник проблемы. При использовании from greetings import * имя greetings не импортируется в глобальное пространство имен. Следовательно, вы не можете использовать reload(greetings) на нем.

Чтобы это исправить, попробуйте следующее:

>>> import greetings
>>> greetings.hello()
hello
>>> reload(greetings)
<module 'greetings' from 'greetings.pyc'>
>>> greetings.hello()
hello world
1 голос
/ 04 июня 2011

IDLE имеет пункт меню для запуска текущего файла. Это перезапустит оболочку, сначала запустив файл и перезагрузив его.

0 голосов
/ 25 апреля 2015

В Windows я использую shell-> Restart shell или комбинацию клавиш CTRL + F6 для перезапуска и загрузки последней версии модуля

...