【问题标题】:Python - import everything from a folderPython - 从文件夹中导入所有内容
【发布时间】: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


【解决方案1】:

我觉得你可以的

from . import *

但我不确定

【讨论】:

    【解决方案2】:
    from subfolder import filename #no __init__.py necessary
    filename.function()
    

    这是一种方法。这是 python 中一个令人困惑的话题,并且取决于您希望如何设置项目的详细信息,因此您的问题实际上缺少一些关于此的具体信息。

    【讨论】:

    • 我将进行编辑以使其更清晰,但我希望能够不对子文件夹或文件名进行硬编码,以动态导入我添加到文件夹中的所有内容
    • 啊,是的,现在我明白了。好的,所以你是对的,import 声明并不真正支持这一点。试试这些:stackoverflow.com/questions/1057431/…
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2018-09-09
    • 2017-04-26
    • 2019-03-18
    • 2019-08-25
    • 2012-08-26
    相关资源
    最近更新 更多