簡體   English   中英

重新加載目錄中的所有模塊

[英]Reload all modules in a directory

我需要重新加載指定目錄中的所有 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使這更正常一點,但它仍然會引發一些錯誤。 您可以看到這會中斷子目錄中的源文件。 您可能應該做的是:導入 package(導入整個文件夾),然后使用. 運營商像這樣:

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

也許您應該查看modules 的文檔,但不要忘記更新路徑以包含您要導入的文件夾的父級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM