AzureDevOps Windows代理中Python同目录模块导入失败求助
解决Windows代理下Python同目录模块导入失败问题
问题重现
Linux代理上运行正常的Python脚本,在Windows代理执行时抛出ModuleNotFoundError: No module named 'utility_functions',脚本结构为utils文件夹下包含setup.py与utility_functions.py两个文件。
解决方案
方案1:在setup.py中添加路径处理
在setup.py最开头插入以下代码,强制将脚本所在目录加入Python的模块搜索路径:
import sys import os # 将当前脚本所在目录添加到模块搜索路径的最前面 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from utility_functions import codeql_language_identifiers, is_traced_language # 后续原有代码保持不变
方案2:修改Azure DevOps执行命令
调整执行命令,先切换到utils目录再运行脚本,确保Python的当前工作目录与模块所在目录一致:
cd E:\vsts\agent1\_work\1268\appsec-ado\utils && E:\vsts\agent1\_work\_tool\Python\3.10.5\x64\python.exe codeql_setup.py
原因分析
Linux环境下直接运行脚本时,Python会自动将脚本所在目录添加到sys.path(模块搜索路径);但Windows代理执行命令时,当前工作目录可能并非脚本所在的utils文件夹,导致Python无法定位到同目录下的utility_functions.py模块。上述两种方案分别从代码层面和执行环境层面修复了路径匹配问题。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

