You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多个Ansible Python模块中使用共享代码文件?

问题解决方法

你的推测是对的:Ansible默认只会将被调用的单个模块文件上传到目标主机的临时执行目录,不会自动同步library下的其他文件,所以目标主机找不到shared.py才会报错。这个问题完全可以解决,不需要让所有模块都独立成单个文件,以下是几种可行方案:

方案1:使用Ansible官方推荐的module_utils目录(最推荐)

Ansible专门提供了module_utils目录来存放模块共享代码,它会自动将该目录下的文件和模块一起打包上传到目标主机。

  • 调整目录结构:
    /
      playbook.yml
      library/
        module1.py
        module2.py
      module_utils/
        shared.py
    
  • 修改模块中的导入语句:
    from ansible.module_utils.shared import my_shared_func
    
  • 执行ansible-playbook playbook.yml时,Ansible会自动处理module_utils里的文件,模块就能正常调用共享函数了。

方案2:内嵌共享代码(适合简单场景)

如果共享代码逻辑简单,可以直接把my_shared_func的代码复制到每个模块文件中,让每个模块保持独立。这种方式不需要额外配置,但代码冗余度高,不适合复杂的共享逻辑。

方案3:打包成Python包(适合长期维护的模块集合)

把你的模块和共享代码做成一个标准Python包,通过setuptools打包后,在所有目标主机上安装这个包。之后模块里就可以用普通的from shared import my_shared_func语句导入,和本地Python项目的导入方式一致。但这种方式需要提前在目标主机完成包的安装,适合模块数量多、共享逻辑复杂的场景。

内容的提问来源于stack exchange,提问作者mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:28:14