2017-09-13 51 views
1

編輯:我相信這個回溯源於某些與依賴關係的問題。使用pip升級軟件包不起作用,但我創建了一個新文件夾並從頭開始安裝,結果如下無法在boto3中創建s3資源/客戶端

我是Python新手,所以我正在努力調試我正在編寫的AWS Lambda。

我把它縮小到這行代碼s3_client = botoSession.resource('s3'),這是一個長的回溯語法錯誤:無效語法。 botoSession變量僅用於憑證 - botoSession = boto3.session.Session(aws_access_token, aws_secret_access_token)

我也試過s3_client = boto3.client('s3'),s3_client = boto3.resource('s3')s3_client = botoSession.resource('s3')

當我使用botoSession.client('ses', region)我沒有問題發送電子郵件。

我發現Error: client = boto3.client('s3') | AWS Elastic Beanstalk Worker Environment似乎是一個類似的問題,但它似乎是相當古老的,我無法弄清楚解決方案是什麼。我嘗試將 import sys sys.path = [p for p in sys.path if not p.endswith('futures-3.0.3-py3.4.egg')] 添加到我的文件的頂部,但似乎沒有工作。

整個回溯如下:

Traceback (most recent call last): 
    File "smartsheetExporter.py", line 45, in <module> 
    s3_client = botoSession.resource('s3') 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/boto3/session.py", line 389, in resource 
    aws_session_token=aws_session_token, config=config) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/boto3/session.py", line 263, in client 
    aws_session_token=aws_session_token, config=config) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/botocore/session.py", line 836, in create_client 
    client_config=config, api_version=api_version) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/botocore/client.py", line 65, in create_client 
    cls = self._create_client_class(service_name, service_model) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/botocore/client.py", line 90, in _create_client_class 
    base_classes=bases) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/botocore/hooks.py", line 227, in emit 
    return self._emit(event_name, kwargs) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/botocore/hooks.py", line 210, in _emit 
    response = handler(**kwargs) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/boto3/utils.py", line 61, in _handler 
    module = import_module(module) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/boto3/utils.py", line 52, in import_module 
    __import__(name) 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/boto3/s3/inject.py", line 15, in <module> 
    from boto3.s3.transfer import create_transfer_manager 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/boto3/s3/transfer.py", line 127, in <module> 
    from s3transfer.exceptions import RetriesExceededError as \ 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/s3transfer/__init__.py", line 134, in <module> 
    import concurrent.futures 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/concurrent/futures/__init__.py", line 8, in <module> 
    from concurrent.futures._base import (FIRST_COMPLETED, 
    File "/Users/nihar/LocalDocs/PythonPractice/Smartsheet-Emailer-Lambda/concurrent/futures/_base.py", line 381 
    raise exception_type, self._exception, self._traceback 
         ^
SyntaxError: invalid syntax 

回答

1

每當奇怪的事情正在發生,它總是一個好主意,更新的東西:

sudo pip install pip --upgrade 
sudo pip install boto --upgrade 
sudo pip install boto3 --upgrade 
sudo pip install awscli --upgrade 

如果你使用Python 3,儘量pip3而不是pip

0

如果您在使用分配到實例角色一個Amazon EC2實例中運行代碼,那麼你只需要這樣:

import boto3 
s3_client = boto3.client('s3') 
s3_resource = boto3.resource('s3') # Pick whichever is wish to use 

如果您是亞馬遜EC2實例上的而不是,則此作品爲:

import boto3 
session = boto3.Session(aws_access_key_id='AKIAxxx',aws_secret_access_key='yyy') 
s3_client = session.client('s3') 
s3_resource = session.resource('s3') 

當然,你應該永遠不要把你的憑據放在代碼文件。相反,將它們放在credentials file(最簡單的是通過aws configure)或環境變量中。這樣,它們不會被複制到任何代碼庫中。

請參見:Boto3 credentials

+0

是否導致錯誤/異常的憑據?我明白,我不應該將這些憑證編入硬編碼,但是我正在嘗試將一個工作示例放在一起。我試過了你建議的代碼,但我仍然有相同/相似的回溯 –

+0

當你不在EC2上運行時,你可以將這些憑證設置爲環境變量。這樣相同的代碼可以在任何環境下工作。 –