перезагрузка Python не может найти модуль из sys.modules - PullRequest
1 голос
/ 05 февраля 2012

Я пытаюсь перезагрузить модуль, который уже загружен в sys.modules, но каким-то образом reload () не работает. (compile () + load будет работать, хотя, тем не менее, я не могу использовать это, так как код перезагружается через витую)

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 Ответ

0 голосов
/ 05 февраля 2012

После того, как вы загрузили модуль, чтобы перезагрузить его, вы должны сделать

module = reload(module)
...