Если вы не доверяете импортируемому коду, вы можете отчасти изолировать его в другом процессе с помощью модуля multiprocessing - в том числе по отношению к globals. По-крайней мере, разрушительные действия этого кода будут ограничены. Но он всё ещё может наворотить дел, например, в файловой системе. Кое-что можно будет поправить в нашей функции-обёртке для импорта модуля, но это непростая задача, и реализуется по-разному в зависимости от ОС, под которой работает интерпретатор.
Например,
from multiprocessing import Process
def run_module(modulename: str): #обёртка для импорта модуля.
try:
#модуль может содержать код, который выполнится прямо в этот момент
import modulename
#либо мы можем потребовать, чтобы в целевом модуле была отдельная функция-точка входа, например run()
modulename.run()
except Exception as err:
raise #можем добавить какую-то общую реакцию на ошибки модуля
# описываем новый процесс
p = Process(target=run_module, args=('module_name', ))
p.start() #API процессов имитирует API потоков.
Также модуль предоставляет
механизмы для общения между процессами.