2017-07-30 65 views
1

我有几个模块,我想重新加载而不必重新启动Sublime Text,而我正在开发一个Sublime Text包。如何在python3.3中重新载入所有导入的模块?

我正在运行Sublime Text build 3142,它随python3.3一起运行它的软件包/插件。但是在开发一个插件,我输入我加入到路径的第三部分模块:

import os 
import sys 

def assert_path(module): 
    """ 
     Import a module from a relative path 
     https://stackoverflow.com/questions/279237/import-a-module-from-a-relative-path 
    """ 
    if module not in sys.path: 
     sys.path.insert(0, module) 

current_directory = os.path.dirname(os.path.realpath(__file__)) 
assert_path(os.path.join(current_directory, 'six')) # https://github.com/benjaminp/six 

import six 

但是,当我编辑模块的源代码six我需要关闭并重新打开崇高的文本,否则崇高文中没有获得对six python模块的更改。


一些代码,到目前为止,我曾尝试:

print(sys.modules) 
import git_wrapper 
imp.reload(find_forks) 
imp.reload(git_wrapper) 
imp.reload(sys) 
  1. Proper way to reload a python module from the console
  2. Reloading module giving NameError: name 'reload' is not defined
+1

您可能也想尝试:https://packagecontrol.io/packages/AutomaticPackageReloader所以你不要不必自己实施重新加载。即使这样做你想要的,但确保你定期测试,通过退出并重新启动Sublime,一切仍然有效。 – OdatNurd

+0

它的工作!谢谢! – user

回答

4

要列出所有导入的模块,你可以使用sys.modules.values()

import sys 
sys.modules.values() 

sys.modules是模块的字符串名称映射到它们引用的字典。

要重新加载模块,你可以从上面并呼吁imp.reload循环在返回列表中的每一个:

import imp 
for module in sys.modules.values(): 
    imp.reload(module)