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

仅在Terraform中运行Python代码时出现Module Not Found问题

问题排查与解决方法

根本原因

Python导入包时会从sys.path列表里的路径搜索对应模块,你单独运行脚本时当前工作目录/环境变量PYTHONPATH包含C:\根路径,所以能识别PS这个顶层包;但Terraform的local-exec执行时,默认环境变量和工作目录都和你手动执行的环境不一致,sys.path中缺少C:\路径,因此找不到PS模块。

排查步骤

  • 在pr.py文件最开头添加以下代码,分别手动执行和通过Terraform执行,对比输出的路径列表差异:
import sys
print(sys.path)
  • 确认手动执行时的sys.path包含C:\,而Terraform执行时输出的路径列表中没有该路径。

解决方法

方法1:在Terraform命令中指定PYTHONPATH环境变量

修改null_resource的command字段,执行Python命令前先把C:\加入PYTHONPATH:
如果local-exec默认用cmd执行:

resource "null_resource" "RPTD" {
  provisioner "local-exec" {
    working_dir = "${path.module}\\scripts"
    command = "set PYTHONPATH=C:\\;%PYTHONPATH% && python pr.py ${var.P_ipaddress}"
  }
  triggers = {
    always_run = "${timestamp()}"
  }
}

如果用PowerShell执行,需要额外指定interpreter:

resource "null_resource" "RPTD" {
  provisioner "local-exec" {
    interpreter = ["powershell", "-Command"]
    working_dir = "${path.module}\\scripts"
    command = "$env:PYTHONPATH = 'C:\\;$env:PYTHONPATH'; python pr.py ${var.P_ipaddress}"
  }
  triggers = {
    always_run = "${timestamp()}"
  }
}

方法2:在Python脚本中动态添加搜索路径

在pr.py的所有导入语句前添加代码,自动把项目根路径加入sys.path,不需要修改Terraform配置:

import sys
from pathlib import Path
# pr.py路径为C:\PS\SoFile\Scripts\pr.py,向上回溯4级到C:\根路径
sys.path.append(str(Path(__file__).parents[3].resolve()))

# 之后再写原来的导入语句
from PS.Libraries.RUCL import ruc # 注意你原代码写的导入rud,要检查是不是拼写错误,RUCL里定义的类是ruc

额外检查项

  • 检查RUCL.py的缩进是否正确,你提供的代码中cs、suc方法的缩进和__init__不一致,可能会导致类属性无法识别
  • 确认你原导入语句from PS.Libraries.RUCL import rud中的rud是不是拼写错误,RUCL.py中只定义了ruc类,没有rud对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:02