serverless / serverless-python-requirements

⚡️🐍📦 Serverless plugin to bundle Python packages
MIT License
1.11k stars 290 forks source link

serverless-python-requirements doesn't seem to remove .pyc, .pyo, or other files from lambda zip, irrespective of options specified in serverless.yml #437

Open cammer-alchemy opened 4 years ago

cammer-alchemy commented 4 years ago

It appears that the serverless-python-requirements plugin is exhibiting some odd behavior. It doesn't appear to be slimming the contents of the package that's deployed to Lambda, and includes the entire contents of the venv directory in the package, irrespective of whether or not athe zip option was selected.

Here's what our serverless.yml looks like:

plugins:
  - serverless-python-requirements
custom:
  pythonRequirements:
    useDownloadCache: false
    useStaticCache: false
    invalidateCaches: true
    zip: true
    slim: true
    slimPatternsAppendDefaults: false # we need to overwrite default dist-info
    slimPatterns:
      # "normal" exclusions:
      - '**/tests/*'
      # default dist-info with !(lib_name*) - matches only if name is not present:
      - "**/!(lib_name*)*.dist-info/*"
      # the rest of defaults:
      - '**/*.py[c|o]'
      - '**/__pycache__*'
  stage: 'dev'
package:
  individually: true
provider:
  name: aws
  runtime: python3.8
  timeout: 20
  region: us-west-2
functions:
  train-model:
    handler: src/python/aws/lambda/train_model.handler

The reason for the slimPatterns is the following comment:

I have found a workaround, sadly it's a bit inconvenient to use At least it works

    slim: true
    slimPatternsAppendDefaults: false # we need to overwrite default dist-info
    slimPatterns:
      # "normal" exclusions:
      - '**/tests/*'
      # default dist-info with !(lib_name*) - matches only if name is not present:
      - "**/!(lib_name*)*.dist-info/*"
      # the rest of defaults:
      - '**/*.py[c|o]'
      -  '**/__pycache__*'

Okay fine, but even that doesn't seem to work. Now with the zip: true above, I do get the .requirements.zip. Woo hoo! It's ~59 megs. BUT, here's my Serverless package:

$ ls -alh train-model.zip 
-rw-r--r-- 1 ryancammer ryancammer 281M Dec  8 20:27 train-model.zip

And why is it so huge?

$ unzip train-model.zip 
inflating: venv/lib64/python3.8/site-packages/websocket/tests/__pycache__/test_cookiejar.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/websocket/tests/__pycache__/test_websocket.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/websocket/tests/data/header01.txt  
  inflating: venv/lib64/python3.8/site-packages/websocket/tests/data/header02.txt  
  inflating: venv/lib64/python3.8/site-packages/websocket/tests/test_cookiejar.py  
  inflating: venv/lib64/python3.8/site-packages/websocket/tests/test_websocket.py  
  inflating: venv/lib64/python3.8/site-packages/websocket_client-0.56.0.dist-info/INSTALLER  
  inflating: venv/lib64/python3.8/site-packages/websocket_client-0.56.0.dist-info/LICENSE  
  inflating: venv/lib64/python3.8/site-packages/websocket_client-0.56.0.dist-info/METADATA  
  inflating: venv/lib64/python3.8/site-packages/websocket_client-0.56.0.dist-info/RECORD  
  inflating: venv/lib64/python3.8/site-packages/websocket_client-0.56.0.dist-info/WHEEL  
  inflating: venv/lib64/python3.8/site-packages/websocket_client-0.56.0.dist-info/top_level.txt  
  inflating: venv/lib64/python3.8/site-packages/yaml/__init__.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/__init__.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/composer.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/constructor.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/cyaml.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/dumper.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/emitter.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/error.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/events.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/loader.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/nodes.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/parser.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/reader.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/representer.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/resolver.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/scanner.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/serializer.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/__pycache__/tokens.cpython-38.pyc  
  inflating: venv/lib64/python3.8/site-packages/yaml/composer.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/constructor.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/cyaml.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/dumper.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/emitter.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/error.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/events.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/loader.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/nodes.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/parser.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/reader.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/representer.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/resolver.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/scanner.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/serializer.py  
  inflating: venv/lib64/python3.8/site-packages/yaml/tokens.py  

So basically, the plugin is including the venv directory anyway, .pyc and all. Using dockerizePip: true, this is the result on OSX:

✗ ls -h
-rw-r--r--   1 cory  staff    64M Dec  8 20:46 .requirements.zip
-rw-r--r--   1 cory  staff    76M Dec  8 20:46 train-model.zip

Again, that train-model.zip file was chock full of .pyc files. I've tried with and without the slimPatterns, with and without zip: true, but no matter what, the end result is a massive lambda zip that's full of .pyc files.

matthewhanson commented 4 years ago

I am also having this same problem, on both Linux and MacOS - seems that the slim feature just doesn't work at all. I'm using this with multiple functions specified with the module option.

It's been marked as a bug, and there are several related issues also marked as bug, but would be great to have more information on it in case there's a work-around or if I'll have to figure out another solution.

dashmug commented 4 years ago

I'm having this issue as well. slim: true does not seem to do anything.

AndrewFarley commented 4 years ago

So, I tried this and I can't replicate this problem. First let me ask, do you guys know that slim only works against the installed requirements? So, after the requirements.txt is handled and all reqs are installed into a subdirectory, then that folder is run through the slim patterns. So slim will not exclude files in your folder already. If you'd like that, serverless has an "excludes" feature built-into it defined at the top-level.

If I'm missing something else here, please explain/show me in more detail.

Eg: it would help me to have a full folder/repo (not just the serverless.yml, include the requirements and any other folders/files (within reason, ofc, feel free to "empty" files if necessary for privacy/sensitivity)) so I can exactly replicate your problem if possible.

AndrewFarley commented 4 years ago

@ryancammer / @dashmug / @matthewhanson / anyone else: Please provide more details and/or a repo that highlights this problem so I can debug further

dashmug commented 4 years ago

@AndrewFarley I'll post a repro repo later today.

dashmug commented 4 years ago

@AndrewFarley Here's the repro: https://github.com/dashmug/serverless-python-requirements-issue-437

Let me know what you think and if there's anything I can help with. Thanks.

AndrewFarley commented 4 years ago

@dashmug I tried your repo, the zip looks good to me. It slimmed perfectly. Admittedly, I did modify the serverless.yml a bit though. Also, I didn't use the version of serverless from your package.json, I used the latest release. My serverless.yml has...

custom:
  pythonRequirements:
    dockerizePip: true
    usePoetry: true
    useDownloadCache: true
    useStaticCache: false
    invalidateCaches: false
    slim: true
.serverless$ find ./serverless-python-requirements-issue-437
./serverless-python-requirements-issue-437
./serverless-python-requirements-issue-437/jwt
./serverless-python-requirements-issue-437/jwt/algorithms.py
./serverless-python-requirements-issue-437/jwt/compat.py
./serverless-python-requirements-issue-437/jwt/api_jwt.py
./serverless-python-requirements-issue-437/jwt/__init__.py
./serverless-python-requirements-issue-437/jwt/contrib
./serverless-python-requirements-issue-437/jwt/contrib/algorithms
./serverless-python-requirements-issue-437/jwt/contrib/algorithms/pycrypto.py
./serverless-python-requirements-issue-437/jwt/contrib/algorithms/py_ecdsa.py
./serverless-python-requirements-issue-437/jwt/contrib/algorithms/__init__.py
./serverless-python-requirements-issue-437/jwt/contrib/__init__.py
./serverless-python-requirements-issue-437/jwt/utils.py
./serverless-python-requirements-issue-437/jwt/exceptions.py
./serverless-python-requirements-issue-437/jwt/api_jws.py
./serverless-python-requirements-issue-437/jwt/help.py
./serverless-python-requirements-issue-437/jwt/__main__.py
./serverless-python-requirements-issue-437/paramiko
./serverless-python-requirements-issue-437/paramiko/primes.py
./serverless-python-requirements-issue-437/paramiko/ecdsakey.py
./serverless-python-requirements-issue-437/paramiko/kex_ecdh_nist.py
./serverless-python-requirements-issue-437/paramiko/py3compat.py
./serverless-python-requirements-issue-437/paramiko/server.py
./serverless-python-requirements-issue-437/paramiko/rsakey.py
./serverless-python-requirements-issue-437/paramiko/config.py
./serverless-python-requirements-issue-437/paramiko/auth_handler.py
./serverless-python-requirements-issue-437/paramiko/pkey.py
./serverless-python-requirements-issue-437/paramiko/kex_gss.py
./serverless-python-requirements-issue-437/paramiko/_version.py
./serverless-python-requirements-issue-437/paramiko/sftp_server.py
./serverless-python-requirements-issue-437/paramiko/ed25519key.py
./serverless-python-requirements-issue-437/paramiko/transport.py
./serverless-python-requirements-issue-437/paramiko/kex_group14.py
./serverless-python-requirements-issue-437/paramiko/util.py
./serverless-python-requirements-issue-437/paramiko/proxy.py
./serverless-python-requirements-issue-437/paramiko/kex_gex.py
./serverless-python-requirements-issue-437/paramiko/kex_group1.py
./serverless-python-requirements-issue-437/paramiko/hostkeys.py
./serverless-python-requirements-issue-437/paramiko/client.py
./serverless-python-requirements-issue-437/paramiko/channel.py
./serverless-python-requirements-issue-437/paramiko/ssh_gss.py
./serverless-python-requirements-issue-437/paramiko/sftp_handle.py
./serverless-python-requirements-issue-437/paramiko/__init__.py
./serverless-python-requirements-issue-437/paramiko/_winapi.py
./serverless-python-requirements-issue-437/paramiko/message.py
./serverless-python-requirements-issue-437/paramiko/win_pageant.py
./serverless-python-requirements-issue-437/paramiko/sftp_client.py
./serverless-python-requirements-issue-437/paramiko/sftp_si.py
./serverless-python-requirements-issue-437/paramiko/ber.py
./serverless-python-requirements-issue-437/paramiko/file.py
./serverless-python-requirements-issue-437/paramiko/kex_group16.py
./serverless-python-requirements-issue-437/paramiko/buffered_pipe.py
./serverless-python-requirements-issue-437/paramiko/common.py
./serverless-python-requirements-issue-437/paramiko/compress.py
./serverless-python-requirements-issue-437/paramiko/agent.py
./serverless-python-requirements-issue-437/paramiko/sftp_file.py
./serverless-python-requirements-issue-437/paramiko/packet.py
./serverless-python-requirements-issue-437/paramiko/sftp_attr.py
./serverless-python-requirements-issue-437/paramiko/sftp.py
./serverless-python-requirements-issue-437/paramiko/dsskey.py
./serverless-python-requirements-issue-437/paramiko/kex_curve25519.py
./serverless-python-requirements-issue-437/paramiko/pipe.py
./serverless-python-requirements-issue-437/paramiko/ssh_exception.py
./serverless-python-requirements-issue-437/cffi-1.14.1.dist-info
./serverless-python-requirements-issue-437/urllib3-1.25.10.dist-info
./serverless-python-requirements-issue-437/chardet-3.0.4.dist-info
./serverless-python-requirements-issue-437/dulwich-0.19.14.dist-info
./serverless-python-requirements-issue-437/pymysql
./serverless-python-requirements-issue-437/pymysql/util.py
./serverless-python-requirements-issue-437/pymysql/constants
./serverless-python-requirements-issue-437/pymysql/constants/FLAG.py
./serverless-python-requirements-issue-437/pymysql/constants/COMMAND.py
./serverless-python-requirements-issue-437/pymysql/constants/CLIENT.py
./serverless-python-requirements-issue-437/pymysql/constants/__init__.py
./serverless-python-requirements-issue-437/pymysql/constants/ER.py
./serverless-python-requirements-issue-437/pymysql/constants/CR.py
./serverless-python-requirements-issue-437/pymysql/constants/SERVER_STATUS.py
./serverless-python-requirements-issue-437/pymysql/constants/FIELD_TYPE.py
./serverless-python-requirements-issue-437/pymysql/protocol.py
./serverless-python-requirements-issue-437/pymysql/cursors.py
./serverless-python-requirements-issue-437/pymysql/connections.py
./serverless-python-requirements-issue-437/pymysql/__init__.py
./serverless-python-requirements-issue-437/pymysql/times.py
./serverless-python-requirements-issue-437/pymysql/charset.py
./serverless-python-requirements-issue-437/pymysql/converters.py
./serverless-python-requirements-issue-437/pymysql/_compat.py
./serverless-python-requirements-issue-437/pymysql/_socketio.py
./serverless-python-requirements-issue-437/pymysql/optionfile.py
./serverless-python-requirements-issue-437/pymysql/err.py
./serverless-python-requirements-issue-437/pymysql/_auth.py
./serverless-python-requirements-issue-437/chardet
./serverless-python-requirements-issue-437/chardet/enums.py
./serverless-python-requirements-issue-437/chardet/langhungarianmodel.py
./serverless-python-requirements-issue-437/chardet/mbcssm.py
./serverless-python-requirements-issue-437/chardet/langthaimodel.py
./serverless-python-requirements-issue-437/chardet/version.py
./serverless-python-requirements-issue-437/chardet/compat.py
./serverless-python-requirements-issue-437/chardet/langbulgarianmodel.py
./serverless-python-requirements-issue-437/chardet/euckrprober.py
./serverless-python-requirements-issue-437/chardet/sjisprober.py
./serverless-python-requirements-issue-437/chardet/cp949prober.py
./serverless-python-requirements-issue-437/chardet/__init__.py
./serverless-python-requirements-issue-437/chardet/euctwfreq.py
./serverless-python-requirements-issue-437/chardet/langhebrewmodel.py
./serverless-python-requirements-issue-437/chardet/cli
./serverless-python-requirements-issue-437/chardet/cli/__init__.py
./serverless-python-requirements-issue-437/chardet/cli/chardetect.py
./serverless-python-requirements-issue-437/chardet/chardistribution.py
./serverless-python-requirements-issue-437/chardet/latin1prober.py
./serverless-python-requirements-issue-437/chardet/charsetprober.py
./serverless-python-requirements-issue-437/chardet/gb2312prober.py
./serverless-python-requirements-issue-437/chardet/mbcharsetprober.py
./serverless-python-requirements-issue-437/chardet/langcyrillicmodel.py
./serverless-python-requirements-issue-437/chardet/euctwprober.py
./serverless-python-requirements-issue-437/chardet/codingstatemachine.py
./serverless-python-requirements-issue-437/chardet/escprober.py
./serverless-python-requirements-issue-437/chardet/universaldetector.py
./serverless-python-requirements-issue-437/chardet/utf8prober.py
./serverless-python-requirements-issue-437/chardet/gb2312freq.py
./serverless-python-requirements-issue-437/chardet/mbcsgroupprober.py
./serverless-python-requirements-issue-437/chardet/langgreekmodel.py
./serverless-python-requirements-issue-437/chardet/eucjpprober.py
./serverless-python-requirements-issue-437/chardet/jisfreq.py
./serverless-python-requirements-issue-437/chardet/escsm.py
./serverless-python-requirements-issue-437/chardet/langturkishmodel.py
./serverless-python-requirements-issue-437/chardet/sbcharsetprober.py
./serverless-python-requirements-issue-437/chardet/big5freq.py
./serverless-python-requirements-issue-437/chardet/euckrfreq.py
./serverless-python-requirements-issue-437/chardet/big5prober.py
./serverless-python-requirements-issue-437/chardet/hebrewprober.py
./serverless-python-requirements-issue-437/chardet/charsetgroupprober.py
./serverless-python-requirements-issue-437/chardet/sbcsgroupprober.py
./serverless-python-requirements-issue-437/chardet/jpcntx.py
./serverless-python-requirements-issue-437/certifi-2020.6.20.dist-info
./serverless-python-requirements-issue-437/requirements.txt
./serverless-python-requirements-issue-437/pycparser
./serverless-python-requirements-issue-437/pycparser/ply
./serverless-python-requirements-issue-437/pycparser/ply/yacc.py
./serverless-python-requirements-issue-437/pycparser/ply/lex.py
./serverless-python-requirements-issue-437/pycparser/ply/ctokens.py
./serverless-python-requirements-issue-437/pycparser/ply/__init__.py
./serverless-python-requirements-issue-437/pycparser/ply/cpp.py
./serverless-python-requirements-issue-437/pycparser/ply/ygen.py
./serverless-python-requirements-issue-437/pycparser/c_parser.py
./serverless-python-requirements-issue-437/pycparser/_ast_gen.py
./serverless-python-requirements-issue-437/pycparser/__init__.py
./serverless-python-requirements-issue-437/pycparser/_c_ast.cfg
./serverless-python-requirements-issue-437/pycparser/c_ast.py
./serverless-python-requirements-issue-437/pycparser/plyparser.py
./serverless-python-requirements-issue-437/pycparser/_build_tables.py
./serverless-python-requirements-issue-437/pycparser/ast_transforms.py
./serverless-python-requirements-issue-437/pycparser/yacctab.py
./serverless-python-requirements-issue-437/pycparser/c_generator.py
./serverless-python-requirements-issue-437/pycparser/c_lexer.py
./serverless-python-requirements-issue-437/pycparser/lextab.py
./serverless-python-requirements-issue-437/six-1.15.0.dist-info
./serverless-python-requirements-issue-437/wrapt-1.12.1.dist-info
./serverless-python-requirements-issue-437/bin
./serverless-python-requirements-issue-437/bin/dul-receive-pack
./serverless-python-requirements-issue-437/bin/chardetect
./serverless-python-requirements-issue-437/bin/pyjwt
./serverless-python-requirements-issue-437/bin/dul-upload-pack
./serverless-python-requirements-issue-437/bin/dulwich
./serverless-python-requirements-issue-437/paramiko-2.7.1.dist-info
./serverless-python-requirements-issue-437/idna-2.10.dist-info
./serverless-python-requirements-issue-437/pycparser-2.20.dist-info
./serverless-python-requirements-issue-437/cryptography
./serverless-python-requirements-issue-437/cryptography/hazmat
./serverless-python-requirements-issue-437/cryptography/hazmat/_der.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/interfaces.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/x448.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/backend.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/ec.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/ciphers.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/ocsp.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/x509.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/aead.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/encode_asn1.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/rsa.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/dh.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/cmac.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/utils.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/poly1305.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/ed25519.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/dsa.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/decode_asn1.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/hmac.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/ed448.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/x25519.py
./serverless-python-requirements-issue-437/cryptography/hazmat/backends/openssl/hashes.py
./serverless-python-requirements-issue-437/cryptography/hazmat/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/scrypt.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/pbkdf2.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/hkdf.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/x963kdf.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/kbkdf.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/kdf/concatkdf.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/twofactor
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/twofactor/totp.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/twofactor/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/twofactor/hotp.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/twofactor/utils.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/serialization
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/serialization/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/serialization/pkcs12.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/serialization/ssh.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/serialization/base.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/cmac.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/poly1305.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/ciphers
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/ciphers/algorithms.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/ciphers/aead.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/ciphers/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/ciphers/modes.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/ciphers/base.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/constant_time.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/x448.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/ec.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/rsa.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/dh.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/utils.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/ed25519.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/dsa.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/ed448.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/x25519.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/asymmetric/padding.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/keywrap.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/hmac.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/hashes.py
./serverless-python-requirements-issue-437/cryptography/hazmat/primitives/padding.py
./serverless-python-requirements-issue-437/cryptography/hazmat/_oid.py
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/_padding.abi3.so
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/_openssl.abi3.so
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/openssl
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/openssl/__init__.py
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/openssl/_conditional.py
./serverless-python-requirements-issue-437/cryptography/hazmat/bindings/openssl/binding.py
./serverless-python-requirements-issue-437/cryptography/__init__.py
./serverless-python-requirements-issue-437/cryptography/x509
./serverless-python-requirements-issue-437/cryptography/x509/oid.py
./serverless-python-requirements-issue-437/cryptography/x509/ocsp.py
./serverless-python-requirements-issue-437/cryptography/x509/general_name.py
./serverless-python-requirements-issue-437/cryptography/x509/__init__.py
./serverless-python-requirements-issue-437/cryptography/x509/extensions.py
./serverless-python-requirements-issue-437/cryptography/x509/name.py
./serverless-python-requirements-issue-437/cryptography/x509/base.py
./serverless-python-requirements-issue-437/cryptography/x509/certificate_transparency.py
./serverless-python-requirements-issue-437/cryptography/utils.py
./serverless-python-requirements-issue-437/cryptography/__about__.py
./serverless-python-requirements-issue-437/cryptography/exceptions.py
./serverless-python-requirements-issue-437/cryptography/fernet.py
./serverless-python-requirements-issue-437/PyPika-0.38.0.dist-info
./serverless-python-requirements-issue-437/_cffi_backend.cpython-38-x86_64-linux-gnu.so
./serverless-python-requirements-issue-437/bcrypt
./serverless-python-requirements-issue-437/bcrypt/__init__.py
./serverless-python-requirements-issue-437/bcrypt/_bcrypt.abi3.so
./serverless-python-requirements-issue-437/bcrypt/__about__.py
./serverless-python-requirements-issue-437/cffi
./serverless-python-requirements-issue-437/cffi/_cffi_include.h
./serverless-python-requirements-issue-437/cffi/backend_ctypes.py
./serverless-python-requirements-issue-437/cffi/error.py
./serverless-python-requirements-issue-437/cffi/setuptools_ext.py
./serverless-python-requirements-issue-437/cffi/_cffi_errors.h
./serverless-python-requirements-issue-437/cffi/__init__.py
./serverless-python-requirements-issue-437/cffi/cffi_opcode.py
./serverless-python-requirements-issue-437/cffi/vengine_gen.py
./serverless-python-requirements-issue-437/cffi/pkgconfig.py
./serverless-python-requirements-issue-437/cffi/model.py
./serverless-python-requirements-issue-437/cffi/ffiplatform.py
./serverless-python-requirements-issue-437/cffi/api.py
./serverless-python-requirements-issue-437/cffi/vengine_cpy.py
./serverless-python-requirements-issue-437/cffi/_embedding.h
./serverless-python-requirements-issue-437/cffi/commontypes.py
./serverless-python-requirements-issue-437/cffi/lock.py
./serverless-python-requirements-issue-437/cffi/recompiler.py
./serverless-python-requirements-issue-437/cffi/cparser.py
./serverless-python-requirements-issue-437/cffi/verifier.py
./serverless-python-requirements-issue-437/cffi/parse_c_type.h
./serverless-python-requirements-issue-437/PyGithub-1.51.dist-info
./serverless-python-requirements-issue-437/idna
./serverless-python-requirements-issue-437/idna/intranges.py
./serverless-python-requirements-issue-437/idna/package_data.py
./serverless-python-requirements-issue-437/idna/compat.py
./serverless-python-requirements-issue-437/idna/idnadata.py
./serverless-python-requirements-issue-437/idna/__init__.py
./serverless-python-requirements-issue-437/idna/core.py
./serverless-python-requirements-issue-437/idna/codec.py
./serverless-python-requirements-issue-437/idna/uts46data.py
./serverless-python-requirements-issue-437/docs
./serverless-python-requirements-issue-437/docs/tutorial
./serverless-python-requirements-issue-437/docs/tutorial/object-store.txt
./serverless-python-requirements-issue-437/docs/tutorial/porcelain.txt
./serverless-python-requirements-issue-437/docs/tutorial/tag.txt
./serverless-python-requirements-issue-437/docs/tutorial/remote.txt
./serverless-python-requirements-issue-437/docs/tutorial/encoding.txt
./serverless-python-requirements-issue-437/docs/tutorial/index.txt
./serverless-python-requirements-issue-437/docs/tutorial/conclusion.txt
./serverless-python-requirements-issue-437/docs/tutorial/repo.txt
./serverless-python-requirements-issue-437/docs/tutorial/introduction.txt
./serverless-python-requirements-issue-437/docs/tutorial/file-format.txt
./serverless-python-requirements-issue-437/PyMySQL-0.10.0.dist-info
./serverless-python-requirements-issue-437/Deprecated-1.2.10.dist-info
./serverless-python-requirements-issue-437/wrapt
./serverless-python-requirements-issue-437/wrapt/importer.py
./serverless-python-requirements-issue-437/wrapt/_wrappers.cpython-38-x86_64-linux-gnu.so
./serverless-python-requirements-issue-437/wrapt/__init__.py
./serverless-python-requirements-issue-437/wrapt/wrappers.py
./serverless-python-requirements-issue-437/wrapt/decorators.py
./serverless-python-requirements-issue-437/requests
./serverless-python-requirements-issue-437/requests/cookies.py
./serverless-python-requirements-issue-437/requests/auth.py
./serverless-python-requirements-issue-437/requests/sessions.py
./serverless-python-requirements-issue-437/requests/hooks.py
./serverless-python-requirements-issue-437/requests/compat.py
./serverless-python-requirements-issue-437/requests/models.py
./serverless-python-requirements-issue-437/requests/certs.py
./serverless-python-requirements-issue-437/requests/__init__.py
./serverless-python-requirements-issue-437/requests/status_codes.py
./serverless-python-requirements-issue-437/requests/packages.py
./serverless-python-requirements-issue-437/requests/__version__.py
./serverless-python-requirements-issue-437/requests/api.py
./serverless-python-requirements-issue-437/requests/_internal_utils.py
./serverless-python-requirements-issue-437/requests/utils.py
./serverless-python-requirements-issue-437/requests/exceptions.py
./serverless-python-requirements-issue-437/requests/structures.py
./serverless-python-requirements-issue-437/requests/help.py
./serverless-python-requirements-issue-437/requests/adapters.py
./serverless-python-requirements-issue-437/PyNaCl-1.4.0.dist-info
./serverless-python-requirements-issue-437/requirements.zip
./serverless-python-requirements-issue-437/pypika
./serverless-python-requirements-issue-437/pypika/terms.py
./serverless-python-requirements-issue-437/pypika/functions.py
./serverless-python-requirements-issue-437/pypika/clickhouse
./serverless-python-requirements-issue-437/pypika/clickhouse/search_string.py
./serverless-python-requirements-issue-437/pypika/clickhouse/__init__.py
./serverless-python-requirements-issue-437/pypika/clickhouse/type_conversion.py
./serverless-python-requirements-issue-437/pypika/clickhouse/condition.py
./serverless-python-requirements-issue-437/pypika/clickhouse/dates_and_times.py
./serverless-python-requirements-issue-437/pypika/clickhouse/nullable_arg.py
./serverless-python-requirements-issue-437/pypika/clickhouse/array.py
./serverless-python-requirements-issue-437/pypika/enums.py
./serverless-python-requirements-issue-437/pypika/__init__.py
./serverless-python-requirements-issue-437/pypika/utils.py
./serverless-python-requirements-issue-437/pypika/dialects.py
./serverless-python-requirements-issue-437/pypika/queries.py
./serverless-python-requirements-issue-437/pypika/analytics.py
./serverless-python-requirements-issue-437/pypika/pseudocolumns.py
./serverless-python-requirements-issue-437/certifi
./serverless-python-requirements-issue-437/certifi/__init__.py
./serverless-python-requirements-issue-437/certifi/core.py
./serverless-python-requirements-issue-437/certifi/cacert.pem
./serverless-python-requirements-issue-437/certifi/__main__.py
./serverless-python-requirements-issue-437/requests-2.24.0.dist-info
./serverless-python-requirements-issue-437/github
./serverless-python-requirements-issue-437/github/TimelineEvent.py
./serverless-python-requirements-issue-437/github/Gist.pyi
./serverless-python-requirements-issue-437/github/Referrer.py
./serverless-python-requirements-issue-437/github/NotificationSubject.pyi
./serverless-python-requirements-issue-437/github/GitTree.pyi
./serverless-python-requirements-issue-437/github/PullRequestReview.py
./serverless-python-requirements-issue-437/github/CommitCombinedStatus.py
./serverless-python-requirements-issue-437/github/Plan.py
./serverless-python-requirements-issue-437/github/TeamDiscussion.pyi
./serverless-python-requirements-issue-437/github/StatsCodeFrequency.pyi
./serverless-python-requirements-issue-437/github/RequiredPullRequestReviews.pyi
./serverless-python-requirements-issue-437/github/View.pyi
./serverless-python-requirements-issue-437/github/PullRequestComment.py
./serverless-python-requirements-issue-437/github/CommitStatus.py
./serverless-python-requirements-issue-437/github/Membership.pyi
./serverless-python-requirements-issue-437/github/StatsParticipation.pyi
./serverless-python-requirements-issue-437/github/Event.py
./serverless-python-requirements-issue-437/github/Rate.pyi
./serverless-python-requirements-issue-437/github/GitRef.py
./serverless-python-requirements-issue-437/github/GitReleaseAsset.py
./serverless-python-requirements-issue-437/github/IssueEvent.pyi
./serverless-python-requirements-issue-437/github/AuthorizationApplication.py
./serverless-python-requirements-issue-437/github/License.pyi
./serverless-python-requirements-issue-437/github/GitObject.py
./serverless-python-requirements-issue-437/github/Clones.py
./serverless-python-requirements-issue-437/github/Branch.pyi
./serverless-python-requirements-issue-437/github/IssuePullRequest.pyi
./serverless-python-requirements-issue-437/github/GitRef.pyi
./serverless-python-requirements-issue-437/github/HookDescription.py
./serverless-python-requirements-issue-437/github/PaginatedList.pyi
./serverless-python-requirements-issue-437/github/AuthorizationApplication.pyi
./serverless-python-requirements-issue-437/github/GitBlob.pyi
./serverless-python-requirements-issue-437/github/Project.pyi
./serverless-python-requirements-issue-437/github/PullRequest.py
./serverless-python-requirements-issue-437/github/GitignoreTemplate.py
./serverless-python-requirements-issue-437/github/Installation.pyi
./serverless-python-requirements-issue-437/github/StatsPunchCard.pyi
./serverless-python-requirements-issue-437/github/NamedUser.py
./serverless-python-requirements-issue-437/github/Deployment.py
./serverless-python-requirements-issue-437/github/IssueEvent.py
./serverless-python-requirements-issue-437/github/__init__.pyi
./serverless-python-requirements-issue-437/github/GistComment.py
./serverless-python-requirements-issue-437/github/TeamDiscussion.py
./serverless-python-requirements-issue-437/github/GithubException.py
./serverless-python-requirements-issue-437/github/StatsPunchCard.py
./serverless-python-requirements-issue-437/github/Repository.pyi
./serverless-python-requirements-issue-437/github/GitTag.py
./serverless-python-requirements-issue-437/github/NamedUser.pyi
./serverless-python-requirements-issue-437/github/GithubObject.pyi
./serverless-python-requirements-issue-437/github/ContentFile.pyi
./serverless-python-requirements-issue-437/github/Organization.py
./serverless-python-requirements-issue-437/github/PullRequestMergeStatus.py
./serverless-python-requirements-issue-437/github/Stargazer.pyi
./serverless-python-requirements-issue-437/github/Rate.py
./serverless-python-requirements-issue-437/github/Notification.py
./serverless-python-requirements-issue-437/github/Organization.pyi
./serverless-python-requirements-issue-437/github/GistFile.py
./serverless-python-requirements-issue-437/github/Installation.py
./serverless-python-requirements-issue-437/github/UserKey.py
./serverless-python-requirements-issue-437/github/CommitComment.py
./serverless-python-requirements-issue-437/github/Plan.pyi
./serverless-python-requirements-issue-437/github/Download.py
./serverless-python-requirements-issue-437/github/PullRequestComment.pyi
./serverless-python-requirements-issue-437/github/Migration.pyi
./serverless-python-requirements-issue-437/github/CommitStatus.pyi
./serverless-python-requirements-issue-437/github/Deployment.pyi
./serverless-python-requirements-issue-437/github/ProjectColumn.py
./serverless-python-requirements-issue-437/github/TimelineEventSource.pyi
./serverless-python-requirements-issue-437/github/PullRequest.pyi
./serverless-python-requirements-issue-437/github/Notification.pyi
./serverless-python-requirements-issue-437/github/GithubException.pyi
./serverless-python-requirements-issue-437/github/Invitation.pyi
./serverless-python-requirements-issue-437/github/ProjectCard.py
./serverless-python-requirements-issue-437/github/PullRequestMergeStatus.pyi
./serverless-python-requirements-issue-437/github/InputGitAuthor.pyi
./serverless-python-requirements-issue-437/github/Commit.py
./serverless-python-requirements-issue-437/github/Stargazer.py
./serverless-python-requirements-issue-437/github/InputFileContent.py
./serverless-python-requirements-issue-437/github/GitTree.py
./serverless-python-requirements-issue-437/github/Hook.py
./serverless-python-requirements-issue-437/github/__init__.py
./serverless-python-requirements-issue-437/github/GitTreeElement.py
./serverless-python-requirements-issue-437/github/GistFile.pyi
./serverless-python-requirements-issue-437/github/GitCommit.pyi
./serverless-python-requirements-issue-437/github/PullRequestPart.py
./serverless-python-requirements-issue-437/github/Branch.py
./serverless-python-requirements-issue-437/github/RateLimit.pyi
./serverless-python-requirements-issue-437/github/RepositoryKey.pyi
./serverless-python-requirements-issue-437/github/Requester.py
./serverless-python-requirements-issue-437/github/AuthenticatedUser.py
./serverless-python-requirements-issue-437/github/RequiredPullRequestReviews.py
./serverless-python-requirements-issue-437/github/RateLimit.py
./serverless-python-requirements-issue-437/github/Authorization.pyi
./serverless-python-requirements-issue-437/github/GitCommit.py
./serverless-python-requirements-issue-437/github/InstallationAuthorization.py
./serverless-python-requirements-issue-437/github/Team.py
./serverless-python-requirements-issue-437/github/GitAuthor.py
./serverless-python-requirements-issue-437/github/GistHistoryState.py
./serverless-python-requirements-issue-437/github/Topic.pyi
./serverless-python-requirements-issue-437/github/Consts.py
./serverless-python-requirements-issue-437/github/GitObject.pyi
./serverless-python-requirements-issue-437/github/Comparison.py
./serverless-python-requirements-issue-437/github/RequiredStatusChecks.pyi
./serverless-python-requirements-issue-437/github/StatsContributor.pyi
./serverless-python-requirements-issue-437/github/File.py
./serverless-python-requirements-issue-437/github/Authorization.py
./serverless-python-requirements-issue-437/github/InputFileContent.pyi
./serverless-python-requirements-issue-437/github/GitRelease.py
./serverless-python-requirements-issue-437/github/StatsCommitActivity.pyi
./serverless-python-requirements-issue-437/github/TimelineEventSource.py
./serverless-python-requirements-issue-437/github/View.py
./serverless-python-requirements-issue-437/github/TimelineEvent.pyi
./serverless-python-requirements-issue-437/github/SourceImport.pyi
./serverless-python-requirements-issue-437/github/GitTag.pyi
./serverless-python-requirements-issue-437/github/Download.pyi
./serverless-python-requirements-issue-437/github/GitBlob.py
./serverless-python-requirements-issue-437/github/Gist.py
./serverless-python-requirements-issue-437/github/BranchProtection.py
./serverless-python-requirements-issue-437/github/Referrer.pyi
./serverless-python-requirements-issue-437/github/Label.py
./serverless-python-requirements-issue-437/github/Reaction.pyi
./serverless-python-requirements-issue-437/github/Event.pyi
./serverless-python-requirements-issue-437/github/GistHistoryState.pyi
./serverless-python-requirements-issue-437/github/GithubObject.py
./serverless-python-requirements-issue-437/github/AuthenticatedUser.pyi
./serverless-python-requirements-issue-437/github/HookResponse.py
./serverless-python-requirements-issue-437/github/CommitStats.py
./serverless-python-requirements-issue-437/github/Milestone.pyi
./serverless-python-requirements-issue-437/github/HookDescription.pyi
./serverless-python-requirements-issue-437/github/Topic.py
./serverless-python-requirements-issue-437/github/CommitCombinedStatus.pyi
./serverless-python-requirements-issue-437/github/ContentFile.py
./serverless-python-requirements-issue-437/github/StatsContributor.py
./serverless-python-requirements-issue-437/github/Permissions.py
./serverless-python-requirements-issue-437/github/py.typed
./serverless-python-requirements-issue-437/github/RepositoryKey.py
./serverless-python-requirements-issue-437/github/GistComment.pyi
./serverless-python-requirements-issue-437/github/GitReleaseAsset.pyi
./serverless-python-requirements-issue-437/github/CommitComment.pyi
./serverless-python-requirements-issue-437/github/StatsCodeFrequency.py
./serverless-python-requirements-issue-437/github/PullRequestPart.pyi
./serverless-python-requirements-issue-437/github/Team.pyi
./serverless-python-requirements-issue-437/github/License.py
./serverless-python-requirements-issue-437/github/InstallationAuthorization.pyi
./serverless-python-requirements-issue-437/github/IssuePullRequest.py
./serverless-python-requirements-issue-437/github/SourceImport.py
./serverless-python-requirements-issue-437/github/Invitation.py
./serverless-python-requirements-issue-437/github/StatsCommitActivity.py
./serverless-python-requirements-issue-437/github/IssueComment.pyi
./serverless-python-requirements-issue-437/github/InputGitAuthor.py
./serverless-python-requirements-issue-437/github/Clones.pyi
./serverless-python-requirements-issue-437/github/PullRequestReview.pyi
./serverless-python-requirements-issue-437/github/Milestone.py
./serverless-python-requirements-issue-437/github/Comparison.pyi
./serverless-python-requirements-issue-437/github/Issue.py
./serverless-python-requirements-issue-437/github/ProjectColumn.pyi
./serverless-python-requirements-issue-437/github/Path.pyi
./serverless-python-requirements-issue-437/github/GitTreeElement.pyi
./serverless-python-requirements-issue-437/github/CommitStats.pyi
./serverless-python-requirements-issue-437/github/UserKey.pyi
./serverless-python-requirements-issue-437/github/InputGitTreeElement.pyi
./serverless-python-requirements-issue-437/github/Commit.pyi
./serverless-python-requirements-issue-437/github/HookResponse.pyi
./serverless-python-requirements-issue-437/github/Repository.py
./serverless-python-requirements-issue-437/github/RequiredStatusChecks.py
./serverless-python-requirements-issue-437/github/Migration.py
./serverless-python-requirements-issue-437/github/Membership.py
./serverless-python-requirements-issue-437/github/MainClass.pyi
./serverless-python-requirements-issue-437/github/Path.py
./serverless-python-requirements-issue-437/github/Tag.pyi
./serverless-python-requirements-issue-437/github/NotificationSubject.py
./serverless-python-requirements-issue-437/github/Issue.pyi
./serverless-python-requirements-issue-437/github/GitAuthor.pyi
./serverless-python-requirements-issue-437/github/IssueComment.py
./serverless-python-requirements-issue-437/github/Project.py
./serverless-python-requirements-issue-437/github/Tag.py
./serverless-python-requirements-issue-437/github/File.pyi
./serverless-python-requirements-issue-437/github/StatsParticipation.py
./serverless-python-requirements-issue-437/github/BranchProtection.pyi
./serverless-python-requirements-issue-437/github/ProjectCard.pyi
./serverless-python-requirements-issue-437/github/Label.pyi
./serverless-python-requirements-issue-437/github/GitignoreTemplate.pyi
./serverless-python-requirements-issue-437/github/Reaction.py
./serverless-python-requirements-issue-437/github/PaginatedList.py
./serverless-python-requirements-issue-437/github/Requester.pyi
./serverless-python-requirements-issue-437/github/Hook.pyi
./serverless-python-requirements-issue-437/github/InputGitTreeElement.py
./serverless-python-requirements-issue-437/github/Permissions.pyi
./serverless-python-requirements-issue-437/github/GitRelease.pyi
./serverless-python-requirements-issue-437/github/MainClass.py
./serverless-python-requirements-issue-437/PyJWT-1.7.1.dist-info
./serverless-python-requirements-issue-437/bcrypt-3.1.7.dist-info
./serverless-python-requirements-issue-437/nacl
./serverless-python-requirements-issue-437/nacl/signing.py
./serverless-python-requirements-issue-437/nacl/public.py
./serverless-python-requirements-issue-437/nacl/encoding.py
./serverless-python-requirements-issue-437/nacl/hashlib.py
./serverless-python-requirements-issue-437/nacl/__init__.py
./serverless-python-requirements-issue-437/nacl/hash.py
./serverless-python-requirements-issue-437/nacl/secret.py
./serverless-python-requirements-issue-437/nacl/utils.py
./serverless-python-requirements-issue-437/nacl/exceptions.py
./serverless-python-requirements-issue-437/nacl/bindings
./serverless-python-requirements-issue-437/nacl/bindings/crypto_hash.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_generichash.py
./serverless-python-requirements-issue-437/nacl/bindings/sodium_core.py
./serverless-python-requirements-issue-437/nacl/bindings/randombytes.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_kx.py
./serverless-python-requirements-issue-437/nacl/bindings/__init__.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_sign.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_secretstream.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_aead.py
./serverless-python-requirements-issue-437/nacl/bindings/utils.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_scalarmult.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_box.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_secretbox.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_pwhash.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_core.py
./serverless-python-requirements-issue-437/nacl/bindings/crypto_shorthash.py
./serverless-python-requirements-issue-437/nacl/pwhash
./serverless-python-requirements-issue-437/nacl/pwhash/__init__.py
./serverless-python-requirements-issue-437/nacl/pwhash/argon2i.py
./serverless-python-requirements-issue-437/nacl/pwhash/scrypt.py
./serverless-python-requirements-issue-437/nacl/pwhash/_argon2.py
./serverless-python-requirements-issue-437/nacl/pwhash/argon2id.py
./serverless-python-requirements-issue-437/nacl/_sodium.abi3.so
./serverless-python-requirements-issue-437/six.py
./serverless-python-requirements-issue-437/urllib3
./serverless-python-requirements-issue-437/urllib3/filepost.py
./serverless-python-requirements-issue-437/urllib3/fields.py
./serverless-python-requirements-issue-437/urllib3/util
./serverless-python-requirements-issue-437/urllib3/util/queue.py
./serverless-python-requirements-issue-437/urllib3/util/wait.py
./serverless-python-requirements-issue-437/urllib3/util/request.py
./serverless-python-requirements-issue-437/urllib3/util/timeout.py
./serverless-python-requirements-issue-437/urllib3/util/__init__.py
./serverless-python-requirements-issue-437/urllib3/util/response.py
./serverless-python-requirements-issue-437/urllib3/util/ssl_.py
./serverless-python-requirements-issue-437/urllib3/util/retry.py
./serverless-python-requirements-issue-437/urllib3/util/url.py
./serverless-python-requirements-issue-437/urllib3/util/connection.py
./serverless-python-requirements-issue-437/urllib3/_version.py
./serverless-python-requirements-issue-437/urllib3/request.py
./serverless-python-requirements-issue-437/urllib3/__init__.py
./serverless-python-requirements-issue-437/urllib3/poolmanager.py
./serverless-python-requirements-issue-437/urllib3/response.py
./serverless-python-requirements-issue-437/urllib3/contrib
./serverless-python-requirements-issue-437/urllib3/contrib/securetransport.py
./serverless-python-requirements-issue-437/urllib3/contrib/__init__.py
./serverless-python-requirements-issue-437/urllib3/contrib/socks.py
./serverless-python-requirements-issue-437/urllib3/contrib/_appengine_environ.py
./serverless-python-requirements-issue-437/urllib3/contrib/pyopenssl.py
./serverless-python-requirements-issue-437/urllib3/contrib/appengine.py
./serverless-python-requirements-issue-437/urllib3/contrib/_securetransport
./serverless-python-requirements-issue-437/urllib3/contrib/_securetransport/__init__.py
./serverless-python-requirements-issue-437/urllib3/contrib/_securetransport/low_level.py
./serverless-python-requirements-issue-437/urllib3/contrib/_securetransport/bindings.py
./serverless-python-requirements-issue-437/urllib3/contrib/ntlmpool.py
./serverless-python-requirements-issue-437/urllib3/connection.py
./serverless-python-requirements-issue-437/urllib3/_collections.py
./serverless-python-requirements-issue-437/urllib3/packages
./serverless-python-requirements-issue-437/urllib3/packages/__init__.py
./serverless-python-requirements-issue-437/urllib3/packages/backports
./serverless-python-requirements-issue-437/urllib3/packages/backports/__init__.py
./serverless-python-requirements-issue-437/urllib3/packages/backports/makefile.py
./serverless-python-requirements-issue-437/urllib3/packages/six.py
./serverless-python-requirements-issue-437/urllib3/packages/ssl_match_hostname
./serverless-python-requirements-issue-437/urllib3/packages/ssl_match_hostname/__init__.py
./serverless-python-requirements-issue-437/urllib3/packages/ssl_match_hostname/_implementation.py
./serverless-python-requirements-issue-437/urllib3/exceptions.py
./serverless-python-requirements-issue-437/urllib3/connectionpool.py
./serverless-python-requirements-issue-437/cffi.libs
./serverless-python-requirements-issue-437/cffi.libs/libffi-806b1a9d.so.6.0.4
./serverless-python-requirements-issue-437/cryptography-3.0.dist-info
./serverless-python-requirements-issue-437/deprecated
./serverless-python-requirements-issue-437/deprecated/sphinx.py
./serverless-python-requirements-issue-437/deprecated/__init__.py
./serverless-python-requirements-issue-437/deprecated/classic.py
./serverless-python-requirements-issue-437/dulwich
./serverless-python-requirements-issue-437/dulwich/pack.py
./serverless-python-requirements-issue-437/dulwich/patch.py
./serverless-python-requirements-issue-437/dulwich/objectspec.py
./serverless-python-requirements-issue-437/dulwich/lru_cache.py
./serverless-python-requirements-issue-437/dulwich/hooks.py
./serverless-python-requirements-issue-437/dulwich/server.py
./serverless-python-requirements-issue-437/dulwich/reflog.py
./serverless-python-requirements-issue-437/dulwich/web.py
./serverless-python-requirements-issue-437/dulwich/config.py
./serverless-python-requirements-issue-437/dulwich/mailmap.py
./serverless-python-requirements-issue-437/dulwich/diff_tree.py
./serverless-python-requirements-issue-437/dulwich/index.py
./serverless-python-requirements-issue-437/dulwich/log_utils.py
./serverless-python-requirements-issue-437/dulwich/protocol.py
./serverless-python-requirements-issue-437/dulwich/client.py
./serverless-python-requirements-issue-437/dulwich/tests
./serverless-python-requirements-issue-437/dulwich/__init__.py
./serverless-python-requirements-issue-437/dulwich/stash.py
./serverless-python-requirements-issue-437/dulwich/contrib
./serverless-python-requirements-issue-437/dulwich/contrib/test_swift.py
./serverless-python-requirements-issue-437/dulwich/contrib/test_swift_smoke.py
./serverless-python-requirements-issue-437/dulwich/contrib/__init__.py
./serverless-python-requirements-issue-437/dulwich/contrib/paramiko_vendor.py
./serverless-python-requirements-issue-437/dulwich/contrib/test_release_robot.py
./serverless-python-requirements-issue-437/dulwich/contrib/release_robot.py
./serverless-python-requirements-issue-437/dulwich/contrib/swift.py
./serverless-python-requirements-issue-437/dulwich/porcelain.py
./serverless-python-requirements-issue-437/dulwich/ignore.py
./serverless-python-requirements-issue-437/dulwich/fastexport.py
./serverless-python-requirements-issue-437/dulwich/walk.py
./serverless-python-requirements-issue-437/dulwich/file.py
./serverless-python-requirements-issue-437/dulwich/repo.py
./serverless-python-requirements-issue-437/dulwich/archive.py
./serverless-python-requirements-issue-437/dulwich/refs.py
./serverless-python-requirements-issue-437/dulwich/errors.py
./serverless-python-requirements-issue-437/dulwich/greenthreads.py
./serverless-python-requirements-issue-437/dulwich/objects.py
./serverless-python-requirements-issue-437/dulwich/stdint.h
./serverless-python-requirements-issue-437/dulwich/line_ending.py
./serverless-python-requirements-issue-437/dulwich/object_store.py
dmeiser commented 4 years ago

I am also hitting this issue. I narrowed it down considerably. It appears that pymysql is causing the package to not slim. I have:

  pythonRequirements:
    slim: true
    usePoetry: true
    strip: false

Narrowed it down:

"slim: true" fails on pymysql unless "useStaticCache: false."

GarrisonD commented 3 years ago

@bsamuel-ui

I am also hitting this issue. I don't know if it helps but can describe how it happened:

  1. Setup serverless application and deploy a function with this config:
custom:
  pythonRequirements:
    dockerizePip: non-linux

    layer: true

And this point everything is working fine 🚀

  1. Change config to this one (just added slim: true):
custom:
  pythonRequirements:
    dockerizePip: non-linux

    layer: true

    slim: true

And I noticed that I don't have Docker running anymore (I am using macOS + dockerizePip: non-linux) and also useless files don't get removed from the ZIP according to the documentation of slim: true option.

  1. What really helped me was cache reset. I don't know for sure but I suppose that serverless-python-requirements plugin looks at changes in requirements.txt and makes a decision to use a cached version from the previous deployment or not. And this is incorrect because it completely ignores any changes to config in serverless.yml.

Exactly this command helped me (and I have to do it every time I change config of the plugin): serverless requirements cleanCache. Docker got running and also useless files got removed by slim: true option and made my pythonRequirements.zip file 5 MB lighter 👍

Also, it's a pity that this command isn't documented in README.md... I found it wandering in the source code.

@AndrewFarley Maybe because you didn't have cache on your machine for that project you couldn't reproduce the issue here

tales-aparecida commented 3 years ago

Thanks @GarrisonD, serverless requirements cleanCache did the trick!

attention-is-all-you-need commented 2 years ago

serverless requirements cleanCache definitely should be mentioned in the README. without this command slim didn't worked for me and my several teammates. so we just never used slim at all...

estahn commented 2 years ago

useStaticCache: false or serverless requirements cleanCache have done the trick for me.

@AndrewFarley Would it be possible to use a hash of the slimPatterns array in the name of the cache file to determine if it needs regeneration? That being said, I haven't looked into how the cache busting works in serverless, so I'm making assumptions here.

darthwalsh commented 1 year ago

@AndrewFarley I mentioned in #794 but I'll repeat here, the python runtime version should be included in the hash of the cache name too?

ralliart2004 commented 1 year ago

I had the inverse of this issue show its ugly head. I was using slim: true and it was removing the dist-info directories I needed because Langchain in their newer version used a new version of metadata package that relies on the .dist-info directories.

See issue #441 and Freek Wiekmeijer comments at the bottom.

Despite the new changes to exclude the .dist-info directories from being removed, this kept excluding them due to the cached dependencies this was leaning on. Running serverless requirements cleanCache if I make any requirements.txt changes has helped thus far. It does take a lot longer to run deployment but it has solved my issue thus far. Thanks @GarrisonD !!!

I hope this information helps someone save time. Time wasted: 11 hours. (Mostly waiting on serverless deploy to do its thing.)

This was my exact error

[ERROR] PackageNotFoundError: No package metadata was found for openai

Traceback (most recent call last):  
File "/var/task/serverless_sdk/__init__.py", line 144, in wrapped_handler    return user_handler(event, context)  
File "/var/task/lib/handler.py", line 236, in main    chat = ChatOpenAI(  
File "/var/task/langchain/load/serializable.py", line 97, in __init__    super().__init__(**kwargs)  
File "pydantic/main.py", line 339, in pydantic.main.BaseModel.__init__    values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)  
File "pydantic/main.py", line 1102, in pydantic.main.validate_model    values = validator(cls_, values)  
File "/var/task/langchain/chat_models/openai.py", line 298, in validate_environment    if is_openai_v1():  
File "/var/task/langchain/utils/openai.py", line 9, in is_openai_v1    _version = parse(version("openai"))  
File "/var/lang/lib/python3.10/importlib/metadata/__init__.py", line 996, in version    return distribution(distribution_name).version  
File "/var/lang/lib/python3.10/importlib/metadata/__init__.py", line 969, in distribution    return Distribution.from_name(distribution_name)  
File "/var/lang/lib/python3.10/importlib/metadata/__init__.py", line 548, in from_name    
raise PackageNotFoundError(name)
danielmarzan commented 6 months ago

Thanks for pointing out this solution @ralliart2004. This configuration solve the error "No package metadata was found for openai"

pythonRequirements: useDownloadCache: false useStaticCache: false slim: true slimPatternsAppendDefaults: false slimPatterns: