2015-08-26 2 views
15

Я совершенно новый с NumPy/SciPy. Но в эти дни я начал активно использовать его для численного расчета вместо использования Matlab.Как импортировать импортированный модуль python?

Для некоторых простых вычислений я делаю это только в интерактивном режиме, вместо написания сценария. В этом случае есть ли способы unimport некоторых модулей, которые уже были импортированы? Unimporting может не понадобиться, когда я пишу программы python, но в интерактивном режиме это необходимо.

+0

но пространство имен? может быть, внешний источник? требуется глубокое сканирование ... – dsgdfg

+0

Sake of argument, есть ли причина, по которой вы не можете перезапустить CLI, когда вам нужно сбросить импорт? –

+0

Зачем вам понадобиться модуль unimport? не говорю, что вы этого не делаете, я просто не могу придумать причину ... – lollercoaster

ответ

7

Пока вы не должны беспокоиться о «unimporting» модуль в Python, вы можете обычно просто уменьшаете ссылку на модуль import эд или функцию с помощью del:

>>> import requests 
>>> dir() 
['__builtins__', '__doc__', '__name__', '__package__', 'readline', 'requests', 'rlcompleter'] 
>>> del requests 
>>> dir() 
['__builtins__', '__doc__', '__name__', '__package__', 'readline', 'rlcompleter'] 
>>> 

Обратите внимание, что я бы посоветовал просто не беспокоясь об этом, так как накладные расходы на неиспользованный импорт почти тривиальны - перемещение одной дополнительной записи в sys.modules - это ничто по сравнению с ложной безопасностью. del some_module даст вам (подумайте, делает ли какая-либо настройка __init__ или вы запустили from X import *).

25

Невозможно выгрузить что-то после его импорта. Python хранит копию модуля в кеше, поэтому в следующий раз, когда вы его импортируете, ему не придется перезагружать и повторно инициализировать его снова.

Если все, что вам нужно, это потерять доступ к нему, вы можете использовать del:

import package 
del package 

Если вы внесли изменения в пакет, и вы хотите видеть обновления, вы можете reload его. Обратите внимание, что это не будет работать в некоторых случаях, например, если импортированный пакет также должен перезагрузить пакет, от которого он зависит. Вы должны прочитать соответствующую документацию, прежде чем полагаться на это.

Для версий Python до 2.7, reload является встроенной функцией:

reload(package) 

Для версий Python 3.0 до 3.3 вы можете использовать imp.reload:

import imp 
imp.reload(package) 

Для версий Python 3.4 и выше вы можете использовать importlib.reload:

import importlib 
importlib.reload(package) 
+7

В python 3 перезагрузите 'imp', так что это будет' import imp; imp.reload (package) ' – NightShadeQueen

+0

Sigh:' imp' теперь устарел от 'importlib' с Python 3.4. Итак, теперь это 'importlib.reload (package)'. –

+1

@ prismalytics.io Интересно, почему в этой области так много оттока. Я обновил ответ, чтобы предоставить все 3 способа его вызова. –

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