【发布时间】: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