संपादित करें: मेरा मानना ​​​​है कि यह ट्रेसबैक निर्भरताओं के साथ किसी प्रकार की समस्या से उत्पन्न होता है। पैकेजों को अपग्रेड करने के लिए पाइप का उपयोग करने से काम नहीं चला, लेकिन मैंने एक नया फ़ोल्डर बनाया और खरोंच से स्थापित किया और यह काम कर गया

मैं एक पायथन नौसिखिया हूं इसलिए मैं एक एडब्ल्यूएस लैम्ब्डा को डीबग करने के लिए संघर्ष कर रहा हूं जिसे मैं लिख रहा हूं।

मैंने इसे कोड की इस पंक्ति 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) का उपयोग किया तो मुझे ईमेल भेजने में कोई समस्या नहीं हुई।

मैंने पाया त्रुटि: क्लाइंट = boto3.client('s3') | एडब्ल्यूएस इलास्टिक बीनस्टॉक वर्कर एनवायरनमेंट जो एक समान मुद्दा प्रतीत होता है, लेकिन यह काफी पुराना प्रतीत होता है और मैं यह पता नहीं लगा पा रहा था कि इसका समाधान क्या है। मैंने जोड़ने की कोशिश की <कोड>आयात sys sys.path = [p के लिए sys.path में 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
Nihar Mitra 14 सितंबर 2017, 01:22

4 जवाब

सबसे बढ़िया उत्तर

जब भी अजीब चीजें हो रही हों, तो चीजों को अपडेट करना हमेशा एक अच्छा विचार होता है:

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

यदि आप Python 3 का उपयोग कर रहे हैं, तो pip के बजाय pip3 आज़माएं।

1
John Rotenstein 14 सितंबर 2017, 03:31

मेरे पास बस boto3 के साथ यही समस्या थी और पायथन संस्करण को डाउनग्रेड करने के लिए समाप्त हो गया था कि मेरा लैम्ब्डा पायथन 3.6 से पायथन 2.7 तक चल रहा था। यदि आप इसके लिए सर्वर रहित फ्रेमवर्क का उपयोग कर रहे हैं, तो आपकी serverless.yml फ़ाइल कुछ इस तरह दिखती है।

provider:
  name: aws
  runtime: python3.6
  memorySize: 3008

cool_function:
    name: cool-function
    description: This lambda goes and performs magic.
    handler: cool_function.lambda_handler
    runtime: python2.7
      - schedule:
          rate: rate(4 hours)
    timeout: 180
0
Justin Rice 9 जुलाई 2019, 20:06

मुझे पायथन 3.6 और AWS लैम्ब्डा के साथ भी यही समस्या थी।

मुझे एक और जवाब मिला जिसने मुझे यहां में मदद की।

आपको futures==2.2.0 का उपयोग करना चाहिए

0
Vilmos Gáspár 19 मार्च 2020, 15:47

यदि आप अपना कोड अमेज़ॅन ईसी2 इंस्टेंस पर एक भूमिका के साथ चला रहे हैं उदाहरण के लिए, तो आपको केवल इसकी आवश्यकता है:

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

अगर आप Amazon 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')

बेशक, आपको अपने क्रेडेंशियल्स को कोड फ़ाइल में कभी नहीं डालना चाहिए। इसके बजाय, उन्हें एक क्रेडेंशियल फ़ाइल में रखें (सबसे आसान है aws configure) या पर्यावरण चर में। इस तरह, उन्हें किसी भी कोड रिपॉजिटरी में कॉपी नहीं किया जाएगा।

देखें: Boto3 क्रेडेंशियल

-1
John Rotenstein 14 सितंबर 2017, 01:43