Python运行AWS Textract表格解析脚本报NoCredentialsError如何配置
凭证配置解决方法
报错本质是boto3 SDK无法从默认查找链中获取有效AWS访问凭证,和你使用os.system调用脚本的方式无关,可按以下几种方案任选其一配置:
方案1:全局配置默认凭证(适合长期使用)
- 完成AWS CLI安装后,在终端执行
aws configure命令,按提示依次输入:- AWS Access Key ID
- AWS Secret Access Key
- 开通Textract服务的对应区域
- 默认输出格式可填
json
- 配置完成后凭证会自动存储在本地默认路径,不管是直接运行Python脚本、还是用
os.system调用子进程,boto3都能自动读取到,无需额外修改代码。
方案2:临时注入环境变量(适合单次测试)
如果不想全局配置凭证,可在调用脚本时前置设置环境变量,无需修改原有textract_python_table_parser.py的内部逻辑:
- macOS/Linux 系统直接修改原有
os.system命令为:
import os # 替换为你的真实凭证和对应区域,环境变量需写在python执行命令前面 cmd = """ AWS_ACCESS_KEY_ID=你的Access Key ID \ AWS_SECRET_ACCESS_KEY=你的Secret Access Key \ AWS_DEFAULT_REGION=你开通Textract的区域 \ python textract_python_table_parser.py my_pdf_file_path.pdf """ k = os.system(cmd) print(k)
- Windows 系统命令格式调整为:
import os cmd = "set AWS_ACCESS_KEY_ID=你的Access Key ID && set AWS_SECRET_ACCESS_KEY=你的Secret Access Key && set AWS_DEFAULT_REGION=你开通Textract的区域 && python textract_python_table_parser.py my_pdf_file_path.pdf" k = os.system(cmd) print(k)
注意:硬编码在命令里的凭证有泄露风险,测试完成后及时删除,不要提交到公开代码仓库。
如果想更优雅地管理子进程环境变量,建议改用subprocess.run替代os.system,可直接传入自定义环境变量,无需拼接命令:
import os import subprocess env = os.environ.copy() env["AWS_ACCESS_KEY_ID"] = "你的Access Key ID" env["AWS_SECRET_ACCESS_KEY"] = "你的Secret Access Key" env["AWS_DEFAULT_REGION"] = "你开通Textract的区域" result = subprocess.run(["python", "textract_python_table_parser.py", "my_pdf_file_path.pdf"], env=env, capture_output=True, text=True) print(result.returncode, result.stdout)
方案3:被调用脚本内显式传入凭证
如果不想使用环境变量,可直接打开textract_python_table_parser.py,找到boto3初始化Textract客户端的代码行,通常为client = boto3.client('textract'),修改为显式传入凭证的形式:
import boto3 client = boto3.client( 'textract', aws_access_key_id="你的Access Key ID", aws_secret_access_key="你的Secret Access Key", region_name="你开通Textract的区域" )
这种方式下,不管用什么方式调用该脚本,都能自动携带凭证完成校验。
额外提示:配置的凭证所属的IAM用户/角色需要拥有Textract调用权限,否则会在后续触发权限类报错。
内容的提问来源于stack exchange,提问作者aabujamra
相关产品推荐
相关产品推荐

