Skip to content

Deploying local file-backed distributions with pipenv fails #314

Closed
@ahonnecke

Description

@ahonnecke

This is a Bug Report

History

Reopening in this repo, original PR here:
serverless/serverless#5768

Description

pipenv allows users to install a local path into the pipenv created venv:

pipenv install -e './subs/panic'

Which results in an entry in the pipfile that points to the local directory:

[packages]
requests = "*"
boto3 = "*"
numpy = "*"
dad-panic = {editable = true, path = "./subs/panic"}

And (while in the venv) allows the user to import the install package

% pipenv run python3 -i                                                                                                                                                             
Python 3.7.1 (default, Nov  6 2018, 18:45:35)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from dad.panic import trigger_incident
>>>exit()

However, serverless fails while attempting to deploy a service to aws lambda that contains a locally installed package as detailed above:

% export SLS_DEBUG=* && export AWS_SDK_LOAD_CONFIG=true && sls deploy --verbose
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command create
Serverless: Load command install
Serverless: Load command package
Serverless: Load command deploy
Serverless: Load command deploy:function
Serverless: Load command deploy:list
Serverless: Load command deploy:list:functions
Serverless: Load command invoke
Serverless: Load command invoke:local
Serverless: Load command info
Serverless: Load command logs
Serverless: Load command login
Serverless: Load command logout
Serverless: Load command metrics
Serverless: Load command print
Serverless: Load command remove
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command slstats
Serverless: Load command plugin
Serverless: Load command plugin
Serverless: Load command plugin:install
Serverless: Load command plugin
Serverless: Load command plugin:uninstall
Serverless: Load command plugin
Serverless: Load command plugin:list
Serverless: Load command plugin
Serverless: Load command plugin:search
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command requirements
Serverless: Load command requirements:clean
Serverless: Load command requirements:install
Serverless: Load command requirements:cleanCache
Serverless: Invoke deploy
Serverless: Invoke package
Serverless: Invoke aws:common:validate
Serverless: Invoke aws:common:cleanupTempDir
Serverless: Generating requirements.txt from Pipfile...
Serverless: Parsed requirements.txt from Pipfile in /Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/.serverless/requirements.txt...
Serverless: Installing requirements from /Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/.serverless/requirements/requirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.7
./subs/panic should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+
You are using pip version 18.1, however version 19.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

  Error --------------------------------------------------

  null

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Stack Trace --------------------------------------------

Error: null
    at installRequirements (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:262:11)
    at installRequirementsIfNeeded (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:451:3)
    at ServerlessPythonRequirements.installAllRequirements (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:530:29)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:22)
    at PluginManager.spawn (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:409:17)
    at Deploy.BbPromise.bind.then (/usr/local/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:117:50)
From previous event:
    at Object.before:deploy:deploy [as hook] (/usr/local/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:107:10)
    at BbPromise.reduce (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:55)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:22)
    at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:422:17)
    at variables.populateService.then.then (/usr/local/lib/node_modules/serverless/lib/Serverless.js:157:33)
    at runCallback (timers.js:694:18)
    at tryOnImmediate (timers.js:665:5)
    at processImmediate (timers.js:647:5)
    at process.topLevelDomainCallback (domain.js:121:23)
From previous event:
    at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:144:8)
    at serverless.init.then (/usr/local/lib/node_modules/serverless/bin/serverless:44:28)

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information -----------------------------
     OS:                     darwin
     Node Version:           10.11.0
     Serverless Version:     1.35.1
  • What went wrong?
    sls deploy failed because (seemingly) pip or pipenv failed to find "./subs/panic" as a local path

  • What did you expect should have happened?
    The project should have built in the container and deployed up to aws with dad.panic in the python namespace, specifically I expect that any packages that I can import and use by activating the virtual environment locally will:

  1. Deploy to the service and 2) import and work once deployed to the service
  • What was the config you used?
service: timescale-monitor-lambda # NOTE: update this with your service name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
  name: aws
  runtime: python3.7
  profile: web
  stage: dev

functions:
  run:
    handler: handler.run

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux
  • What stacktrace or error message from your provider did you see?
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command create
Serverless: Load command install
Serverless: Load command package
Serverless: Load command deploy
Serverless: Load command deploy:function
Serverless: Load command deploy:list
Serverless: Load command deploy:list:functions
Serverless: Load command invoke
Serverless: Load command invoke:local
Serverless: Load command info
Serverless: Load command logs
Serverless: Load command login
Serverless: Load command logout
Serverless: Load command metrics
Serverless: Load command print
Serverless: Load command remove
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command slstats
Serverless: Load command plugin
Serverless: Load command plugin
Serverless: Load command plugin:install
Serverless: Load command plugin
Serverless: Load command plugin:uninstall
Serverless: Load command plugin
Serverless: Load command plugin:list
Serverless: Load command plugin
Serverless: Load command plugin:search
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command requirements
Serverless: Load command requirements:clean
Serverless: Load command requirements:install
Serverless: Load command requirements:cleanCache
Serverless: Invoke deploy
Serverless: Invoke package
Serverless: Invoke aws:common:validate
Serverless: Invoke aws:common:cleanupTempDir
Serverless: Generating requirements.txt from Pipfile...
Serverless: Parsed requirements.txt from Pipfile in /Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/.serverless/requirements.txt...
Serverless: Installing requirements from /Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/.serverless/requirements/requirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.7
./subs/panic should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+
You are using pip version 18.1, however version 19.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

  Error --------------------------------------------------

  null

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Stack Trace --------------------------------------------

Error: null
    at installRequirements (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:262:11)
    at installRequirementsIfNeeded (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:451:3)
    at ServerlessPythonRequirements.installAllRequirements (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:530:29)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:22)
    at PluginManager.spawn (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:409:17)
    at Deploy.BbPromise.bind.then (/usr/local/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:117:50)
From previous event:
    at Object.before:deploy:deploy [as hook] (/usr/local/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:107:10)
    at BbPromise.reduce (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:55)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:22)
    at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:422:17)
    at variables.populateService.then.then (/usr/local/lib/node_modules/serverless/lib/Serverless.js:157:33)
    at runCallback (timers.js:694:18)
    at tryOnImmediate (timers.js:665:5)
    at processImmediate (timers.js:647:5)
    at process.topLevelDomainCallback (domain.js:121:23)
From previous event:
    at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:144:8)
    at serverless.init.then (/usr/local/lib/node_modules/serverless/bin/serverless:44:28)

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information -----------------------------
     OS:                     darwin
     Node Version:           10.11.0
     Serverless Version:     1.35.1

Similar issues (possibly):

Additional Data

% cat /Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/.serverless/requirements.txt
-i https://pypi.org/simple
-e ./subs/panic
certifi==2018.11.29
chardet==3.0.4
environs==4.1.0
idna==2.8
marshmallow==2.18.0
numpy==1.16.0
python-dotenv==0.10.1
requests-mock==1.5.2
requests==2.21.0
urllib3==1.24.1 ; python_version >= '3.4'
  • Serverless Framework Version you're using:
    1.35.1

  • Operating System:
    OSX 10.13.4

  • Stack Trace:

    at installRequirements (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:262:11)
    at installRequirementsIfNeeded (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:451:3)
    at ServerlessPythonRequirements.installAllRequirements (/Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/node_modules/serverless-python-requirements/lib/pip.js:530:29)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:22)
    at PluginManager.spawn (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:409:17)
    at Deploy.BbPromise.bind.then (/usr/local/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:117:50)
From previous event:
    at Object.before:deploy:deploy [as hook] (/usr/local/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:107:10)
    at BbPromise.reduce (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:55)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:391:22)
    at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:422:17)
    at variables.populateService.then.then (/usr/local/lib/node_modules/serverless/lib/Serverless.js:157:33)
    at runCallback (timers.js:694:18)
    at tryOnImmediate (timers.js:665:5)
    at processImmediate (timers.js:647:5)
    at process.topLevelDomainCallback (domain.js:121:23)
From previous event:
    at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:144:8)
    at serverless.init.then (/usr/local/lib/node_modules/serverless/bin/serverless:44:28)
  • Provider Error messages:

  • Generated requirements.txt:

% cat /Users/ahonnecke/Code/repos/timescale-monitor-lambda/timescale-monitor-lambda/.serverless/requirements.txt
-i https://pypi.org/simple
-e ./subs/panic
certifi==2018.11.29
chardet==3.0.4
environs==4.1.0
idna==2.8
marshmallow==2.18.0
numpy==1.16.0
python-dotenv==0.10.1
requests-mock==1.5.2
requests==2.21.0
urllib3==1.24.1 ; python_version >= '3.4'
  • Manual pip install:
ahonnecke ~/.../timescale-monitor-lambda/.serverless
% cat requirements.txt                                                                                                                                                              (submodule-install *!?)
-i https://pypi.org/simple
-e ./subs/panic
certifi==2018.11.29
chardet==3.0.4
environs==4.1.0
idna==2.8
marshmallow==2.18.0
numpy==1.16.0
python-dotenv==0.10.1
requests-mock==1.5.2
requests==2.21.0
urllib3==1.24.1 ; python_version >= '3.4'
ahonnecke ~/.../timescale-monitor-lambda/.serverless
% pip install -r requirements.txt                                                                                                                                                   (submodule-install *!?)
./subs/panic should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions