Skip to main content
 首页 » 编程设计

python之重新加载目录中的所有模块

2025年05月04日9qq78292959

我需要重新加载指定目录中的所有 python 模块。

我试过这样的:

import sys, os 
import_folder = "C:\\myFolder" 
sys.path.insert( 0 , import_folder ) 
for dir in os.listdir(import_folder): 
    name = os.path.splitext(dir)[0] 
    ext = os.path.splitext(dir)[1] 
    if ext == ".py": 
        import( eval(name) ) 
        reload( eval(name) ) 

有人知道如何正确执行此操作吗?

请您参考如下方法:

import os # we use os.path.join, os.path.basename 
import sys # we use sys.path 
import glob # we use glob.glob 
import importlib # we use importlib.import_module 
 
import_folder = 'C:\\myFolder' 
sys.path.append(import_folder) # this tells python to look in `import_folder` for imports 
for src_file in glob.glob(os.path.join(import_folder, '*.py')): 
    name = os.path.basename(src_file)[:-3] 
    importlib.import_module(name) 
    reload(sys.modules[name]) 
    importlib.import_module(name) 

有代码。现在来看整个事情的语义:使用 importlib使这更正常一点,但它仍然会引发一些错误。您可以看到这会中断子目录中的源文件。您可能应该做的是:导入包,(导入整个文件夹),然后使用 . 运算符,如下所示:

import sys # we use sys.path 
sys.path.append('C:\\') 
import myFolder 
... 
myFolder.func1(foo) 
myFolder.val 
bar = myFolder.Class1() 

也许你应该看看 documentation for modules ,但不要忘记更新路径以包含要导入的文件夹的父文件夹。