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

标签 python import module directory reload

我需要重新加载指定目录中的所有 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 ,但不要忘记更新路径以包含要导入的文件夹的父文件夹。

关于python - 重新加载目录中的所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088630/

相关文章:

python - 是否有与 perl 的 module-starter 等效的 python?

Python 归约和元组

python - 如何在Python中获得巨大对角矩阵的伪逆?

Python:如何在 float 中打印 100.0 而不是 100

python - 如何从子目录运行 Python 脚本?

python - 在 python 中组织类和模块

python - 无法在 fedora23 工作站上安装 cffi

import - 如何导入 AggregatorV3Interface

c++ - 如何导入将 [c++] 类导入 [objective-c] 类的 [objective-c++] 类?

ruby module_function 与包含模块