我正在尝试使用Python S3从一个公共AWS cloudpathlib
桶下载一个文件夹。我的代码如下所示:
from cloudpathlib import CloudPath
path = r"C:\some\path\to\folder"
url = "s3://some-example-bucket/folder/"
cloud_path = CloudPath(url)
cloud_path.download_to(path)
非常直接。据我所知,这应该是可行的,因为水桶是公开的:
下面是桶策略(取自AWS S3教程):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::cozy-auto-texture-sd-repo/*"
}
]
}
当我运行Python代码来安装文件夹stable-diffusion-v1-4
时,会出现以下错误消息:
File "E:\Cozy-Auto-Texture-Files\venv\lib\site-packages\botocore\auth.py", line 418, in add_auth
raise NoCredentialsError()
botocore.exceptions.NoCredentialsError: Unable to locate credentials
我的问题是为什么会发生这种事?我的桶不应该要求凭证,因为它是公开的。有什么地方我漏了桶的权限,还是它是Python代码的东西?
谢谢你的阅读,我感谢你的帮助!
编辑:
我再次尝试过这种方法:
BUCKET_NAME = 'cozy-auto-texture-sd-repo' # replace with your bucket name
KEY = 'stable-diffusion-v1-4'
s3 = boto3.resource('s3')
try:
s3.Bucket(BUCKET_NAME).download_file(KEY, sd_path)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
然而,同样的错误消息botocore.exceptions.NoCredentialsError: Unable to locate credentials
出现了,这使我相信我的S3桶设置有问题。
发布于 2022-09-14 20:16:22
假设您在本地运行此脚本,您可能需要首先在本地计算机上设置AWS凭据。
它与一个包含:默认的aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY (使用aws configure
)的~/.aws/credentials
文件一起工作,如果您安装了aws-cli
.,它也可以工作。
https://stackoverflow.com/questions/73708204
复制相似问题