如何导入自定义 py 模块但在本地命名空间中重新定义它?

How do you Import a custom py module but redefine it within the local namespace?

我创建了一个自定义 py 文件,returns 您的 globals() 值并允许您删除任何导入的模块。但是,由于它在该函数中 运行s globals(),当我将模块导入另一个 py 文件时,它只是 returns 定义它的函数命名空间的 globals() 目录文件。我希望这是有道理的。

示例:

   # custom py file: "mod1.py"

   def mods():
   return( globals() )
   

   # different py file, kernel reset

    from mod1 import mods
    mods()

所以发生的事情是 运行ning globals() - returns 本地命名空间中的所有名称,但该命名空间是定义函数的地方,又名:“mod1.py”。我怎样才能 运行 它在第二个 py 文件中?

基于 this 对一个有点相关的问题的回答——如果我正确理解了你想要实现的目标——你可以:

mod1.py

import inspect
from types import ModuleType

def delete_modules():
    "deletes modules from namespace of the caller"
    frame = inspect.currentframe()
    try:
        globals = (frame.f_back.f_globals)
        to_delete = []
        for name, obj in globals.items():
            if type(obj) == ModuleType and name != '__builtins__':
                to_delete.append(name)
        for name in to_delete:
            print(f"Deleting module {name}")
            del globals[name]            
    finally:
        del frame

然后做:

>>> import os
>>> import sys
>>> from mod1 import delete_modules
>>> a = "hello"
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'delete_modules', 'os', 'sys']
>>> delete_modules()
Deleting module os
Deleting module sys
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'delete_modules']