在执行get_bucket时BOTO抛出UnboundLocalError

时间:2016-12-13 05:09:05

标签: python amazon-web-services amazon-ec2 boto emr

我正在尝试使用boto从EMR上传一个~46Gb文件的大文件到S3。 我写的代码是

>>> import math, os
>>> import boto
>>> from filechunkio import FileChunkIO

# Connect to S3
>>> c = boto.connect_s3()
>>> b = c.get_bucket('mybucket')

这给我带来了错误:

UnboundLocalError: local variable 'region_name' referenced before assignment

您可以在以下链接中找到相同错误的整个堆栈:

https://github.com/boto/boto/issues/2624

有人可以告诉我这个问题有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我使用boto.s3.connection.S3Connection,效果很好。

这是我的代码,可能对您有所帮助:

import os
from boto.s3.connection import S3Connection
from contextlib import contextmanager

@contextmanager
def connect_to_s3(access_key=ACCESS_KEY, secret_key=SECRET_KEY,
                  use_sigv4=False):
    kwargs = {
        'aws_access_key_id': access_key,
        'aws_secret_access_key': secret_key
    }
    if use_sigv4:
        os.environ['S3_USE_SIGV4'] = 'True'
        kwargs['host'] = 's3.amazonaws.com'
    else:
        os.environ['S3_USE_SIGV4'] = ''
    conn = S3Connection(**kwargs)
    try:
        yield conn
    finally:
        conn.close()

我正在使用boto==2.40.0