2017-09-13 2 views
1

EDIT: Ich glaube, diese Rückverfolgung stammt aus einer Art von Problem mit den Abhängigkeiten. Die Verwendung von pip, um die Pakete zu aktualisieren, hat nicht funktioniert, aber ich habe einen neuen Ordner erstellt und von Grund auf neu installiertKann nicht s3 Ressource/Client in Boto3

Ich bin ein Python-Anfänger, also kämpfe ich um ein AWS Lambda debuggen ich schreibe.

Ich habe es auf diese Codezeile s3_client = botoSession.resource('s3') eingegrenzt, die eine lange Rückverfolgung mit Syntaxfehler gibt: ungültige Syntax. Die Variable botoSession ist nur für die Anmeldeinformationen - botoSession = boto3.session.Session(aws_access_token, aws_secret_access_token).

Ich habe auch versucht s3_client = boto3.client('s3'), s3_client = boto3.resource('s3'), s3_client = botoSession.resource('s3').

Wenn ich botoSession.client('ses', region) verwendet habe, hatte ich keine Probleme beim Senden von E-Mails.

Ich fand Error: client = boto3.client('s3') | AWS Elastic Beanstalk Worker Environment, die ein ähnliches Problem schien, aber es schien ziemlich alt zu sein, und ich konnte nicht herausfinden, was die Lösung war. Ich habe versucht, import sys sys.path = [p for p in sys.path if not p.endswith('futures-3.0.3-py3.4.egg')] an den Anfang meiner Datei hinzuzufügen, die nicht zu funktionieren schien.

Die gesamte Rückverfolgungs ist wie folgt:

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 

Antwort

1

Jedes Mal, wenn seltsame Dinge geschehen, es ist immer eine gute Idee, Dinge zu aktualisieren:

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

Wenn Sie 3 Python sind, versuchen pip3 statt pip.

0

Wenn Sie Ihren Code auf einer Amazon EC2-Instanz mit einer Rolle der Instanz zugeordnet sind, ausgeführt wird, dann nur Sie dies benötigen:

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

Wenn Sie nicht auf einer Amazon EC2-Instanz sind, funktioniert dies:

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') 

Natürlich sollten Sie niemals Ihre Anmeldeinformationen in die Codedatei eingeben. Platzieren Sie sie stattdessen in credentials file (am einfachsten über aws configure) oder in Umgebungsvariablen. Auf diese Weise werden sie nicht in ein Code-Repository kopiert.

Siehe: Boto3 credentials

+0

Sind die Anmeldeinformationen für den Fehler/die Ausnahme verantwortlich? Ich verstehe, dass ich die Anmeldeinformationen nicht fest codieren sollte, aber ich habe versucht, nur ein funktionierendes Beispiel zu erstellen. Ich habe den Code ausprobiert, den Sie vorgeschlagen haben, aber ich habe immer noch den gleichen/ähnlichen Traceback. –

+0

Wenn Sie nicht auf EC2 laufen, können Sie diese Anmeldeinformationen als Umgebungsvariablen festlegen. Auf diese Weise funktioniert der gleiche Code in jeder Umgebung. –

Verwandte Themen