【问题标题】:How to import externally into a module如何从外部导入模块
【发布时间】:2019-05-24 12:53:17
【问题描述】:

1。我想做的事

目前,我有一个模块可以在其中调用许多其他模块,并且在其中每个模块中都有其他导入重复,因为它们通常需要相同的方法才能工作。所以,与其重复导入,我想说的是对于这些模块,执行这些导入。

2。到目前为止我想出了什么

到目前为止,我知道如何做到这一点的唯一方法是创建一个具有适当结构的 .json 字典来导入相应的模块。但是,这只是将问题降到最低,因为无论如何每个模块内都应该有 with open(...) 语句。

3。我的“解决方案”代码

{
 "import module_x" : [
                      "module1.py",
                      "module2.py"
                     ]
}

然后,在module1 和module2 中,我会:

import json

with open(path_to_imports + 'imports.json', 'r') as f:
    import_dict = json.load(f)

for key, mods in import_dict.items():
    if __file__ in mods:
        exec(key)

现在,有没有更好、更 pythonic 的方式来做到这一点?

【问题讨论】:

    标签: python python-3.x import python-import


    【解决方案1】:

    您可以使用 Python __init__.py 文件来处理此问题。

    查看What is __init__.py for?

    【讨论】:

    • __init__.py 文件确实有很大帮助。但我仍然无法根据调用导入的文件/模块进行选择性导入。我不太清楚如何获取调用 __init__.py 导入的文件的名称(我已经使用 inspect 库中的 stack 进行了尝试),这让我无法有选择地导入东西。然而,我已经可以简化事情了,但是每次我运行一个模块时,它都会导入与包相关的所有内容,而不仅仅是特定模块。
    • 也许我可以使用__all__ 变量进行选择性导出?是否可以在其中创建字典并使用键/值选择性地导出内容?
    猜你喜欢
    • 2015-11-27
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多