Python delete import module

Как удалить импорт модуля Python?

Я нахожусь в процессе кодирования приложения, которое должно получить метаданные (автор, версия.. и т. Д.) Из нескольких модулей (файлы.py) и отобразить их. Пользователь выбирает сценарий, и сценарий выполняется. (Новые скрипты могут быть добавлены, а старые — из целевой папки, как система плагинов).

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

Как я могу это реализовать?

1. del module 2. del sys.modules['module'] 

Последний не сработал. Я попробовал #python и получил ответ, что нецелесообразно де-импортировать модули, но я хочу знать чистый способ реализации этого. Любые идеи / предложения помогут.

3 ответа

Я думаю, что этот пост должен помочь вам

изменить: для обеспечения доступности этой информации (в случае, если ссылка умирает или что-то подобное), я включу оригинальное сообщение из списка рассылки репетитора здесь:

На самом деле, мой вопрос, после использования IDLE для импорта модулей и инициализации переменных, как вернуть его в исходное состояние без закрытия и повторного открытия.

Так, например, после того, как я сделал

>>> import math, psyco >>> a = 4**23 

Как я могу стереть их, не закрывая IDLE? (Раньше я знал, как, но я забыл.)

Обычно это влечет за собой удаление из «реестра модулей» и удаление ссылок на него в коде. Если у вас действительно хорошо используемый модуль (например, модуль с параметрами конфигурации, импортированными в каждый модуль), то у вас будет дополнительный шаг удаления его из каждый модуль. Кроме того, если вы используете «из psyco import . «, то вы не сможете легко освободить модуль и ссылку на модуль (это из этого модуля или импортировано из третьего модуля? смотрите «если параноик: код ниже).

Приведенная ниже функция удаляет модуль по имени из интерпретатора Python, параметр «paranoid» представляет собой список имен переменных, которые нужно удалить из любого другого модуля (предположительно, удаляемого с помощью модуля). Будьте ОЧЕНЬ осторожны с параноидальным параметром; это может вызвать проблемы для вашего интерпретатора, если ваши функции и классы названы одинаково в разных модулях. Одним из распространенных случаев этого является «ошибка» для исключений. У многих библиотек есть одно исключение «ловить все», называемое «ошибка» в модуле. Если вы также назвали свое исключение «ошибка» и решили включить это в список параноиков. там есть много других объектов исключений.

def delete_module(modname, paranoid=None): from sys import modules try: thismod = modules[modname] except KeyError: raise ValueError(modname) these_symbols = dir(thismod) if paranoid: try: paranoid[:] # sequence support except: raise ValueError('must supply a finite list for paranoid') else: these_symbols = paranoid[:] del modules[modname] for mod in modules.values(): try: delattr(mod, modname) except AttributeError: pass if paranoid: for symbol in these_symbols: if symbol[:2] == '__': # ignore special symbols continue try: delattr(mod, symbol) except AttributeError: pass 

Тогда вы сможете использовать это как:

delete_module('psyco', ['Psycho', 'KillerError']) # only delete these symbols from every other module # (for "from psyco import Psycho, KillerError" statements) 

Источник

Python delete import module

Last updated: Feb 19, 2023
Reading time · 2 min

banner

# Remove an imported module in Python

To remove an imported module in Python:

  1. Use the del statement to delete the sys reference to the module.
  2. Use the del statement to remove the direct reference to the module.
Copied!
import sys import requests # 👇️ print(requests.get) # ✅ remove an imported module del sys.modules['requests'] del requests # ⛔️ NameError: name 'X' is not defined print(requests.get)

remove imported module

The first step is to delete the sys.modules reference to the module we are trying to unload.

Sys.modules is a dictionary that maps module names to modules that have already been loaded.

The dictionary is most commonly used to force reload modules.

This is necessary because even if we delete the direct reference to the module, we’d still have a reference to it with the sys.modules dictionary.

Copied!
import sys import requests # 👇️ print(requests.get) del requests # 👇️ print(sys.modules['requests'])

For the module to get garbage collected, we have to delete the key from the sys.modules dictionary and delete the direct reference to the module.

# Reloading a previously imported module

It can sometimes be tricky to unload a module. An alternative you can try is to reload the module using the importlib.reload() method.

Copied!
from importlib import reload import requests if len('a') == 1: requests = reload(requests) # 👇️ print(requests.get)

reloading previously imported module

The importlib.reload method reloads a previously imported module.

The argument to the method must be a module object that has been successfully imported (prior to reloading it).

The importlib.reload() method is most often used when we have edited the source of the module using an external editor and we want to get access to the newer version without exiting the interpreter.

The reload() method returns the module object, so you can directly reassign the module to the result of calling reload(module) .

# Additional Resources

You can learn more about the related topics by checking out the following tutorials:

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.

Источник

How To Remove an Imported Module in Python

Sometimes while working, we want to remove a previously imported module. We can use some methods, such as using the del statement or pop() methods, to achieve the goal. This article will explain it in detail. Let’s find out.

Remove an imported module in Python.

There are several ways to Remove an imported module in Python. We’ll go through each approach and how it’s used.

Use “del” statement

Python del keyword is used to delete objects in Python programming language. Because everything in this language is an object, the del keyword was created to make it easy to delete objects such as strings, numbers, Lists, etc.

name = "John" # The variable name is deleted and no longer exists del name print(name)
NameError: name 'name' is not defined

There’s no way to unload anything you accidentally imported into Python. Because Python will save a copy in temporary memory, so you will use del statement to disconnect from that module.

Use the statement “del” placed in front of the module you want to remove the connection.

When you try to reapply the module that you lost connection with, Python will utilize the cached version, thus you must use the “reload()” function to update the module again.

import importlib # Use "reload()" to update the module importlib.reload(module)

The del statement can also be used to delete modules from the “sys.modules” dictionary

import sys import numpy # Use "del" statement to delete modules from the "sys.modules" dictionary del sys.modules['numpy']

Use the “pop()” method

pop() is a method used to delete an item from a dictionary, it can also be used on a List object. The return value of this method will be the item it removed.

dictionary.pop(key, defaultvalue)

key: is the key of the item you want to delete in the dictionary

defaultvalue: If the key you passed does not exist, this default value will be returned.

Return Value:

The value of the item deleted from the dictionary will be returned

When you import a module, the module will be saved into the “sys.modules” dictionary so that we can use the pop() method to unimport. “sys.modules” is a dictionary that stores all the module names that have been imported.

import sys # Use the "pop()" method to unimport sys.modules.pop("module name")

You still have to use the reload() method if you want to import again. If you don’t update the module, Python will still use the old code you imported before.

Summary

We learned how to remove an imported module in Python through the article. Modules cannot be completely removed once imported, but we can only not refer to them. Hope this article is helpful to you.

Carolyn Hise has three years of software development expertise. Strong familiarity with the following languages is required: Python, Typescript/Nodejs, .Net, Java, C++, and a strong foundation in Object-oriented programming (OOP).

Источник

Как удалить импорт модуля Python?

Я занимаюсь кодированием приложения, которое должно получать метаданные (author, version..etc) из нескольких модулей (.py файлов) и отображать их. Пользователь выбирает script и выполняется script. (Новые скрипты могут быть добавлены, а старые — из целевой папки, как система плагинов). Во-первых, я импортирую script, и я вывожу метаданные, затем я перехожу к следующему. Но я хочу де-импортировать все остальные модули, кроме тех, которые выбрал пользователь. Как это реализовать? Я пробовал эти

1. del module 2. del sys.modules['module'] 

Последнее не сработало. Я попробовал #python и получил ответ, что было неплохо де-импорт модулей, но я хочу знать, как это реализовать. Любые идеи/предложения помогут.

Получайте метаданные, анализируя код с помощью модуля ast вместо их импорта, как это делают такие инструменты, как Epydoc , PyDoctor и Sphinx .

3 ответа

Я думаю, этот пост должен помочь вам

изменить: чтобы обеспечить доступность этой информации (в случае, если ссылка умирает или что-то подобное), я включу исходное сообщение из списка рассылки здесь:

Собственно, мой вопрос заключается в том, что после использования IDLE для импорта модулей и инициализации переменных, как вернуть их в начальное состояние без закрытия и повторного открытия.

Итак, например, после того, как я сделал

>>> import math, psyco >>> a = 4**23 

Как я могу стереть их без закрытия IDLE? (Я знал, как, но я забыл.)

Обычно это подразумевает удаление из «реестра модулей» и удаление ссылки на него в коде. Если у вас действительно хорошо используемый модуль (например, один с параметрами конфигурации, импортированными в каждый модуль), тогда у вас будет дополнительный шаг удаления из каждого модуля. Кроме того, если вы используете «от импорта psyco. «, то вы не сможете освободить модуль и легко ссылаться на модуль (это он из этого модуля или импортирован из третий модуль? см. «если параноид: код ниже».

Функция ниже удаляет модуль по имени из интерпретатора Python, Параноидальный параметр — это список имен переменных для удаления из любого другого модуль (предположительно, удаляется вместе с модулем). Будьте ОЧЕНЬ осторожны с параноидальный параметр; это может вызвать проблемы у вашего переводчика, если функции и классы называются одинаковыми в разных модулях. Один общий это означает «ошибку» для исключений. Многие библиотеки имеют один исключение «catch-all», называемое «ошибкой» в модуле. Если вы также назвали свой исключение «ошибка» и решил включить это в параноидальный список. там перейдите много других объектов исключений.

def delete_module(modname, paranoid=None): from sys import modules try: thismod = modules[modname] except KeyError: raise ValueError(modname) these_symbols = dir(thismod) if paranoid: try: paranoid[:] # sequence support except: raise ValueError('must supply a finite list for paranoid') else: these_symbols = paranoid[:] del modules[modname] for mod in modules.values(): try: delattr(mod, modname) except AttributeError: pass if paranoid: for symbol in these_symbols: if symbol[:2] == '__': # ignore special symbols continue try: delattr(mod, symbol) except AttributeError: pass 

Затем вы сможете использовать это как:

delete_module('psyco', ['Psycho', 'KillerError']) # only delete these symbols from every other module # (for "from psyco import Psycho, KillerError" statements) 

Источник

Читайте также:  Свойства box shadow css
Оцените статью