【问题标题】:Dynamically load and execute Python modules in isolation单独动态加载和执行 Python 模块
【发布时间】:2018-08-28 10:21:48
【问题描述】:

这是对此处提出的关于动态执行 python 模块的问题的扩展

Dynamic module import in Python

虽然共识似乎是使用 import 或 importlib 来完成 python 模块的动态加载/执行,但当您在动态加载的模块中定义额外的导入时,此解决方案往往会崩溃.

以原文为例

myapp/
    __init__.py
    commands/
        __init__.py
        command1.py
        command2.py
    foo.py
    bar.py

如果 command1.py 导入 command2.py,那么当您尝试使用 importlib 或 import 动态加载 command1.py 时,它将失败

ModuleNotFoundError: 没有名为“command2”的模块

现在我可以通过将 commands 目录添加到 sys.path 来解决这个问题,但这会污染全局命名空间。如果有多个命令文件夹具有不同的 pip 第三方库依赖项,这可能会带来更大的问题。一个命令可能依赖于不同版本的 pip 安装库,而不是另一个命令。

所以本质上,我正在寻找一种单独动态加载/执行 python 模块的方法。关于如何实现这一点的任何想法?

【问题讨论】:

  • exec(f.read())
  • exec 与 importlib 有何不同?不会遇到同样的问题吗?

标签: python python-3.x


【解决方案1】:

由于myapp 是您项目的根文件夹,而不是myapp/commands,您应该这样做:

from commands import command2

command1.py,这样解释器就可以加载command2.py

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 2010-10-31
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多