Как перезагрузить модуль 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 для перезагрузки и загрузки последней версии модуля