使用Python boto3访问AWS S3是否存在同目录多文件调用限制?
问题解答
结论
boto3不存在仅支持单个Python文件调用的限制,同工作目录下的任意Python文件都可以正常调用boto3访问AWS服务,你遇到的问题由代码错误、环境配置不一致或凭证配置缺失导致。
首先排查代码错误
你提供的代码存在2个明显问题:
- 导入模块错误:Python内置的系统模块是小写
os,代码里写的import OS会直接抛出模块不存在异常,导致代码无法运行,修改为import os即可。 - 函数重复定义:代码中两次定义
create_bucket函数,前者还存在create_bucket(=bucket_name)的语法错误,虽然你实际调用的是upload_small_file,但冗余错误代码会增加排查难度,建议删除错误的冗余函数定义。
同目录不同文件运行失败的常见原因及排查方法
- 运行环境不一致:PyCharm中不同Python文件可独立配置运行时的虚拟环境,若第一个文件使用的虚拟环境安装了boto3,第二个文件切换到未安装boto3的虚拟环境,就会调用失败。可在两个文件中都添加代码
import boto3; print(boto3.__file__)运行,对比输出的boto3安装路径是否一致,不一致则在PyCharm右上角运行配置中统一选择同一个已安装boto3的虚拟环境即可。 - 凭证配置缺失:boto3会按代码显式传入凭证>环境变量>用户根目录下.aws/credentials配置文件>运行环境绑定的IAM角色的顺序查找AWS访问凭证,若你第一个文件硬编码了凭证、或运行时配置了专属环境变量,第二个文件未同步配置,就会因无法获取凭证导致连接失败。可在报错的文件中添加代码
print(boto3.Session().get_credentials()),输出为None则说明凭证配置异常,可统一在用户根目录创建.aws/credentials文件配置全局凭证,或测试时在代码中显式传入凭证:
s3 = boto3.client( 's3', aws_access_key_id='你的AWS访问密钥ID', aws_secret_access_key='你的AWS秘密访问密钥', region_name='ap-south-1' )
- 运行工作目录不一致:PyCharm运行不同文件时默认的工作目录可能不同,若你依赖当前工作目录下的本地配置文件,工作目录不对会导致配置文件读取失败。可在两个文件中添加代码
import os; print(os.getcwd())运行,对比输出的工作目录是否一致,不一致则在运行配置中统一设置工作目录即可。
验证方法
完成上述配置后,可在报错的文件中运行最简测试代码验证连接:
import boto3 s3 = boto3.client('s3', region_name='ap-south-1') # 列出所有存储桶验证连接 print(s3.list_buckets())
内容的提问来源于stack exchange,提问作者navin
相关产品推荐
相关产品推荐

