Как перезагрузить модуль Python в IDLE?

Я пытаюсь понять, как мой рабочий процесс может работать с 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, но ни один из ответов не помог мне.

Ответ 1

Вам нужно переделать эту строку:

>>> from greetings import *

после

>>> reload(greetings)

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

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

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

>>> reload(greetings)
<module 'greetings' from 'greetings.py'>
>>> greetings.hello()
world!

Ответ 2

Вот что я получу, когда попробую ваш пример (из нового интерактивного сеанса 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

Ответ 3

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

Ответ 4

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