Невозможно развернуть код Chalice в aws с зависимостями сторонних (tarball)

Я являюсь опытным разработчиком node.js, работал с бессерверными фреймворками и функциями firebase. Я недавно начал работать с фреймворком Chalice, это хорошо и легко начать, но что-то не так с зависимостями, я все еще не могу развернуть его с зависимости

все начинается с того, что я создал программу Hello World и запускаю локально с chalice local команда, а затем развернуть на AWS с chalice deploy это работало довольно хорошо, тогда я попытался включить pyrebase ( https://github.com/thisbejim/Pyrebase) библиотеку python для firebase

код здесь для справки:

```
from chalice import Chalice
app = Chalice(app_name='abc')

import pyrebase
config = {
    "apiKey": "xxxxxxxxxxx",
    "authDomain": "xxxxxx.firebaseapp.com",
    "databaseURL": "https://xxx.firebaseio.com",
    "storageBucket": "xxxxx.appspot.com",
}
firebase = pyrebase.initialize_app(config).database()

@app.route('/webhook', methods=['POST'])
def myFunction():
    # This is the JSON body which is sent in POST request.
    jsonBody = app.current_request.json_body

    if jsonBody.get('result').get('action') == 'wellcome':
        print('wellcome action detected')

        return {"speech": "Wellcome to the bot, say book hotel to book it any time"}

    elif jsonBody.get('result').get('action') == 'bookHotel':
        print('hotel booking action detected')

        users = firebase.child("users").get()
        print(users.val())

        data = {
            "name": jsonBody.get('result').get('parameters').get('number'),
            "color": jsonBody.get('result').get('parameters').get('color')
        }
        print("dictionary made ", data)

        results = firebase.child("users").push(data)
        print("result: ")
        print(results)
        return{"speech": " hotel booking done"}
    else:
        print('No Action detected')
        return{"speech": "No Action Detected"}

```

он работает локально очень хорошо, но когда я развернул его на AWS (после выполнения pip freeze > needs.txt), он отклонил с сообщением 'charmap' codec can't decode byte 0x81 in position 191: character maps to <undefined>

затем из проблемы № 491 я узнал, что выполнение замораживания пипсов может закончиться этой проблемой, и, конечно же, моя среда была загружена множеством вещей - я не понимал почему, потому что я развернул код фляжки на heroku с той же средой, загруженной множеством дополнительных вещей, не связанных на мой код колбы, но он не выдавал никакой ошибки, и код работал правильно

Затем я создал новую среду Python 3.6, в которой ничего уже не устанавливалось (с помощью навигатора anaconda, так как я использую дистрибутив anaconda для python), просто чтобы убедиться, что в новой среде не установлено ничего лишнего, я делаю pip freeze сразу после создания среды, и это было только два:

```
certifi==2016.2.28
wincertstore==0.2

```

я запомнил эти два для удаления в случае каких-либо проблем

Затем я установил pyrebase в окружающей среде

```
(C:\Users\AdMin\Anaconda3\envs\new_env) E:\Projects\class project\chalice-apiai-webhook>pip install pyrebase
Collecting pyrebase
  Using cached Pyrebase-3.0.27-py3-none-any.whl
Collecting pycryptodome==3.4.3 (from pyrebase)
  Using cached pycryptodome-3.4.3-cp36-cp36m-win_amd64.whl
Collecting python-jwt==2.0.1 (from pyrebase)
  Using cached python_jwt-2.0.1-py2.py3-none-any.whl
Collecting gcloud==0.17.0 (from pyrebase)
Collecting requests==2.11.1 (from pyrebase)
  Using cached requests-2.11.1-py2.py3-none-any.whl
Collecting requests-toolbelt==0.7.0 (from pyrebase)
  Using cached requests_toolbelt-0.7.0-py2.py3-none-any.whl
Collecting oauth2client==3.0.0 (from pyrebase)
Collecting jws>=0.1.3 (from python-jwt==2.0.1->pyrebase)
Collecting httplib2>=0.9.1 (from gcloud==0.17.0->pyrebase)
Collecting googleapis-common-protos (from gcloud==0.17.0->pyrebase)
Collecting six (from gcloud==0.17.0->pyrebase)
  Using cached six-1.11.0-py2.py3-none-any.whl
Collecting protobuf!=3.0.0.b2.post1,>=3.0.0b2 (from gcloud==0.17.0->pyrebase)
  Using cached protobuf-3.4.0-py2.py3-none-any.whl
Collecting pyasn1>=0.1.7 (from oauth2client==3.0.0->pyrebase)
  Using cached pyasn1-0.3.5-py2.py3-none-any.whl
Collecting rsa>=3.1.4 (from oauth2client==3.0.0->pyrebase)
  Using cached rsa-3.4.2-py2.py3-none-any.whl
Collecting pyasn1-modules>=0.0.5 (from oauth2client==3.0.0->pyrebase)
  Using cached pyasn1_modules-0.1.4-py2.py3-none-any.whl
Requirement already satisfied: setuptools in c:\users\admin\anaconda3\envs\new_env\lib\site-packages (from protobuf!=3.0.0.b2.post1,>=3.0.0b2->gcloud==0.17.0->pyrebase)
Installing collected packages: pycryptodome, jws, python-jwt, pyasn1, rsa, six, httplib2, pyasn1-modules, oauth2client, protobuf, googleapis-common-protos, gcloud, requests, requests-toolbelt, pyrebase
Successfully installed gcloud-0.17.0 googleapis-common-protos-1.5.2 httplib2-0.10.3 jws-0.1.3 oauth2client-3.0.0 protobuf-3.4.0 pyasn1-0.3.5 pyasn1-modules-0.1.4 pycryptodome-3.4.3 pyrebase-3.0.27 python-jwt-2.0.1 requests-2.11.1 requests-toolbelt-0.7.0 rsa-3.4.2 six-1.11.0

(C:\Users\AdMin\Anaconda3\envs\new_env) E:\Projects\class project\chalice-apiai-webhook>
```

и опять pip freeze > requirement.txt тогда файл require.txt становится:

```
certifi==2016.2.28
gcloud==0.17.0
googleapis-common-protos==1.5.2
httplib2==0.10.3
jws==0.1.3
oauth2client==3.0.0
protobuf==3.4.0
pyasn1==0.3.5
pyasn1-modules==0.1.4
pycryptodome==3.4.3
Pyrebase==3.0.27
python-jwt==2.0.1
requests==2.11.1
requests-toolbelt==0.7.0
rsa==3.4.2
six==1.11.0
wincertstore==0.2
```

затем я снова использую chalice deploy:

```
Updating lambda function...
Creating deployment package.

Could not install dependencies:
googleapis-common-protos==1.5.2
pycryptodome==3.4.3
You will have to build these yourself and vendor them in
the chalice vendor folder.

Your deployment will continue but may not work correctly
if missing dependencies are not present. For more information:
http://chalice.readthedocs.io/en/latest/topics/packaging.html

Updating IAM policy.
Sending changes to lambda.
API Gateway rest API already found.
Deploying to: api
https://p5s68hp275.execute-api.us-east-1.amazonaws.com/api/
```

когда я звоню URL https://p5s68hp275.execute-api.us-east-1.amazonaws.com/api/webhook через инструмент почтальона он говорит: {"message": "Internal server error"}

когда я проверяю логи, он говорит: 2017-09-19 15:13:46.966000 577087 module initialization error: module 'pyrebase' has no attribute 'initialize_app'2017-09-19 15:13:46.966000 577087 module initialization error: module 'pyrebase' has no attribute 'initialize_app'2017-09-19 15:13:46.966000 577087 module initialization error: module 'pyrebase' has no attribute 'initialize_app'

Затем я понял, что есть два способа предоставления сторонних зависимостей, один requirement.txt и другое vendor folder(ссылка на документ: http://chalice.readthedocs.io/en/latest/topics/packaging.html), а также понял, что есть две вещи, одна - колесо (.whl), а другая - тарбол (.tar.gz) и я где-то читал, что проблема, от которой я страдаю, в основном идет с пакетом, в который входит tarball, и в этом случае мы должны загрузить исходный код, используя pip download packege-name и нужно собрать его вручную (tarball -> wheel) с помощью команды pip wheel packege-name.tar.gz

хорошо, я не уверен с этим, но попробовал этот метод и загрузил источник pyrebase:

```
19-Sep-17  07:01 PM    <DIR>          .
19-Sep-17  07:01 PM    <DIR>          ..
19-Sep-17  07:01 PM           458,001 gcloud-0.17.0.tar.gz
19-Sep-17  07:01 PM            28,426 googleapis-common-protos-1.5.2.tar.gz
19-Sep-17  07:01 PM           204,500 httplib2-0.10.3.tar.gz
19-Sep-17  07:01 PM             8,104 jws-0.1.3.tar.gz
19-Sep-17  07:01 PM            77,208 oauth2client-3.0.0.tar.gz
19-Sep-17  07:01 PM           375,727 protobuf-3.4.0-py2.py3-none-any.whl
19-Sep-17  07:01 PM            63,452 pyasn1-0.3.5-py2.py3-none-any.whl
19-Sep-17  07:01 PM            60,445 pyasn1_modules-0.1.4-py2.py3-none-any.whl
19-Sep-17  07:01 PM         7,544,723 pycryptodome-3.4.3-cp36-cp36m-win_amd64.whl
19-Sep-17  07:01 PM             9,561 Pyrebase-3.0.27-py3-none-any.whl
19-Sep-17  07:01 PM             8,755 python_jwt-2.0.1-py2.py3-none-any.whl
19-Sep-17  07:01 PM           514,827 requests-2.11.1-py2.py3-none-any.whl
19-Sep-17  07:01 PM            52,341 requests_toolbelt-0.7.0-py2.py3-none-any.whl
19-Sep-17  07:01 PM            46,918 rsa-3.4.2-py2.py3-none-any.whl
19-Sep-17  07:01 PM           478,810 setuptools-36.5.0-py2.py3-none-any.whl
19-Sep-17  07:01 PM            10,702 six-1.11.0-py2.py3-none-any.whl
              16 File(s)      9,942,500 bytes
               2 Dir(s)  25,223,860,224 bytes free
```

построить его вручную с pip wheel Pyrebase-3.0.27-py3-none-any.whlтеперь я могу видеть некоторые дополнительные файлы, похоже, что все.tar.gz теперь имеют свое представление.whl:

```

19-Sep-17  07:04 PM    <DIR>          .
19-Sep-17  07:04 PM    <DIR>          ..
19-Sep-17  07:04 PM           642,294 gcloud-0.17.0-cp36-none-any.whl
19-Sep-17  07:01 PM           458,001 gcloud-0.17.0.tar.gz
19-Sep-17  07:01 PM            28,426 googleapis-common-protos-1.5.2.tar.gz
19-Sep-17  07:04 PM            59,967 googleapis_common_protos-1.5.2-cp36-none-any.whl
19-Sep-17  07:04 PM            85,518 httplib2-0.10.3-cp36-none-any.whl
19-Sep-17  07:01 PM           204,500 httplib2-0.10.3.tar.gz
19-Sep-17  07:04 PM            11,818 jws-0.1.3-cp36-none-any.whl
19-Sep-17  07:01 PM             8,104 jws-0.1.3.tar.gz
19-Sep-17  07:04 PM           107,384 oauth2client-3.0.0-cp36-none-any.whl
19-Sep-17  07:01 PM            77,208 oauth2client-3.0.0.tar.gz
19-Sep-17  07:01 PM           375,727 protobuf-3.4.0-py2.py3-none-any.whl
19-Sep-17  07:01 PM            63,452 pyasn1-0.3.5-py2.py3-none-any.whl
19-Sep-17  07:01 PM            60,445 pyasn1_modules-0.1.4-py2.py3-none-any.whl
19-Sep-17  07:01 PM         7,544,723 pycryptodome-3.4.3-cp36-cp36m-win_amd64.whl
19-Sep-17  07:01 PM             9,561 Pyrebase-3.0.27-py3-none-any.whl
19-Sep-17  07:01 PM             8,755 python_jwt-2.0.1-py2.py3-none-any.whl
19-Sep-17  07:01 PM           514,827 requests-2.11.1-py2.py3-none-any.whl
19-Sep-17  07:01 PM            52,341 requests_toolbelt-0.7.0-py2.py3-none-any.whl
19-Sep-17  07:01 PM            46,918 rsa-3.4.2-py2.py3-none-any.whl
19-Sep-17  07:01 PM           478,810 setuptools-36.5.0-py2.py3-none-any.whl
19-Sep-17  07:01 PM            10,702 six-1.11.0-py2.py3-none-any.whl
              21 File(s)     10,849,481 bytes
               2 Dir(s)  25,222,946,816 bytes free
```

и поместите его в папку vendor теперь моя структура папок:скриншот 25

и затем снова попытался развернуть с надеждой, что это решение будет работать, проект развернут без ошибок, но проблема та же, когда я нажал на URL с почтальоном, он говорит internal server error и логи говорят, что проблема с пиребазой

пожалуйста, несколько слов для решения проблемы

0 ответов

Другие вопросы по тегам