web-dev-qa-db-fra.com

Comment désimporter un module python déjà importé?)

Je suis assez nouveau avec NumPy/SciPy. Mais ces jours-ci, j'ai commencé à l'utiliser très activement pour le calcul numérique au lieu d'utiliser Matlab.

Pour certains calculs simples, je fais juste en mode interactif plutôt que d'écrire un script. Dans ce cas, existe-t-il un moyen de ne pas importer certains modules déjà importés? Il se peut que la sous-importation ne soit pas nécessaire lorsque j'écris des programmes python), mais en mode interactif, cela est nécessaire.

43
chanwcom

Il n'y a aucun moyen de décharger quelque chose une fois que vous l'avez importé. Python conserve une copie du module dans un cache afin que, lors de la prochaine importation, il ne soit plus nécessaire de le recharger et de le réinitialiser.

Si tout ce dont vous avez besoin est de perdre votre accès, vous pouvez utiliser del:

import package
del package

Si vous avez modifié un paquet et que vous voulez voir les mises à jour, vous pouvez le reload le. Notez que cela ne fonctionnera pas dans certains cas, par exemple si le package importé doit également recharger un package dont il dépend. Vous devriez lire la documentation pertinente avant de vous en remettre à cela.

Pour Python versions jusqu'à 2.7, reload est une fonction intégrée:

reload(package)

Pour Python versions 3.0 à 3.3, vous pouvez utiliser imp.reload :

import imp
imp.reload(package)

Pour Python versions 3.4 et supérieures, vous pouvez utiliser importlib.reload :

import importlib
importlib.reload(package)
72
Mark Ransom

Bien que vous ne devriez pas vous soucier de "désimporter" un module en Python, vous pouvez normalement simplement décrémenter la référence au module ou à la fonction imported à l'aide de del:

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

Notez que je vous conseillerais simplement de ne pas vous inquiéter à ce sujet, car la surcharge d'une importation non utilisée est presque triviale - traverser une entrée supplémentaire dans sys.modules _ n’est rien comparé à la fausse sécurité del some_module vous donnera (considérez si le __init__ fait quelques réglages ou vous avez couru from X import *).

13
user559633