python reload 找不到 sys.modules 中的模块

1 投票
1 回答
2302 浏览
提问于 2025-04-17 12:22

我正在尝试重新加载一个已经在 sys.modules 中加载的模块,但 reload() 似乎没有效果。虽然 compile() 和 load() 可以工作,但我不能使用它们,因为这是通过 twisted 进行的代码重载。

for loader, module_name, is_pkg in pkgutil.walk_packages(main_module.__path__):
    if(not module_name in sys.modules):
       module = loader.find_module(module_name).load_module(module_name)
     else:
       module = sys.modules.get(module_name)
       #this is unhelpful
       #sys.path.append(module.__path__)
       #this works
       #imp.find_module(module.__name__, module.__path__)
       #this doesn't
       reload(module)

Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/celery/execute/trace.py", line 36, in trace
    return cls(states.SUCCESS, retval=fun(*args, **kwargs))
  File "/usr/lib64/python2.7/site-packages/celery/app/task/__init__.py", line 232, in __call__
    return self.run(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/celery/app/__init__.py", line 172, in run
    return fun(*args, **kwargs)
  File "/home/myuser/Dropbox/job-pipe/job_pipe/apps/tasks/crawl.py", line 71, in crawl
    crawler = CrawlerScript()
  File "/home/myuser/Dropbox/job-pipe/job_pipe/apps/tasks/crawl.py", line 37, in __init__
    reload(module)
ImportError: No module named example

那么,正确的重新加载方法是什么呢?我以为是 find_module 引起的问题,但它似乎工作正常,而且错误信息也没有什么帮助。

谢谢。

1 个回答

-1

一旦你加载了一个模块,如果想要重新加载它,你需要这样做:

module = reload(module)

撰写回答