【发布时间】:2020-05-03 15:52:49
【问题描述】:
我是一名 Python 初学者(经过几年的课程和实验生活),正在返回个人项目。
我想从一个文件夹中导入所有内容,我希望我添加到文件夹中的所有代码都导入到我的主目录中。 经过研究,我想出了这个尝试,放在主要:
from os.path import dirname, basename, isfile, join
import glob
import importlib
modules = glob.glob(join(dirname(__file__), "*.py"))
allMods = [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py') and not f.endswith("main.py")]
for i in range(0, len(allMods)):
importlib.import_module(allMods[i])
'allMods' 在一个数组中包含所有文件的名称, - ["a","b","etc"] - 这就是为什么我使用 for 循环遍历每个文件并尝试导入它们 - 例如:importlib.import_module("a") 此时没有错误,所以 something 正在工作,但是当尝试访问 a.py、b.py 等时,它们根本没有定义(“未解析的引用”)。
在此之前,我在_ _ init _ _.py尝试了从标准导入到野代码的所有方法,我什至到了谷歌的第二页。
这对于我目前的技能来说显然太高级了(反复试验是我学习最好的方法)。那么,这个解决方案从一开始就是错误的,还是有什么可以挽救的?
谢谢。
EDIT_1:基本上,我希望能够动态导入我添加到文件夹中的所有内容,而不是硬编码导入命令。
【问题讨论】:
-
肯定会回到使用
__init__.py,我知道这很令人困惑,但你正在做的事情(拉出python内部并自己做)......不好。听起来您真正想要的是使您的子文件夹项目成为“模块”(从import语句的角度来看)。试试这个:stackoverflow.com/questions/15222913/… -
对不起,我链接的线程不是很好。我会为你解答。
-
您的代码忽略了从
importlib.import_module(allMods[i])返回的值,这是加载的模块。要引用加载的模块,您需要根据模块的文件名创建一个变量并为其分配返回值。
标签: python import module import-module