Search code examples
pythonherokupipenv

Heroku - ImportError: cannot import name 'InsecureRequestWarning'


Heroku is suddenly rejecting deployments of my Python app with the error:

remote:        ImportError: cannot import name 'InsecureRequestWarning'
remote:  !     Push rejected, failed to compile Python app.

This is occurring when deploying completely non-functional changes to what's already running fine on Heroku.

✗ git checkout -b testing heroku/master 
Branch testing set up to track remote branch master from heroku.
Switched to a new branch 'testing'
➜  fwdform2 git:(testing) ✗ echo "Garbage" > README.md 
➜  fwdform2 git:(testing) ✗ git add README.md 
➜  fwdform2 git:(testing) ✗ git commit -m "Non-functional changes"
[testing 7dd95cb] Non-functional changes
 1 file changed, 1 insertion(+), 275 deletions(-)
 rewrite README.md (100%)
➜  fwdform2 git:(testing) ✗ git push heroku testing:master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes | 288.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing dependencies with latest Pipenv…
remote:        Traceback (most recent call last):
remote:          File "/app/.heroku/python/bin/pipenv", line 11, in <module>
remote:            sys.exit(cli())
remote:          File "/tmp/build_ffaa2c482e67c8c4daeb9b3348ef030d/.heroku/python/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 722, in __call__
remote:            return self.main(*args, **kwargs)
remote:          File "/tmp/build_ffaa2c482e67c8c4daeb9b3348ef030d/.heroku/python/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
remote:            rv = self.invoke(ctx)
remote:          File "/tmp/build_ffaa2c482e67c8c4daeb9b3348ef030d/.heroku/python/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1063, in invoke
remote:            Command.invoke(self, ctx)
remote:          File "/tmp/build_ffaa2c482e67c8c4daeb9b3348ef030d/.heroku/python/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
remote:            return ctx.invoke(self.callback, **ctx.params)
remote:          File "/tmp/build_ffaa2c482e67c8c4daeb9b3348ef030d/.heroku/python/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
remote:            return callback(*args, **kwargs)
remote:          File "/tmp/build_ffaa2c482e67c8c4daeb9b3348ef030d/.heroku/python/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
remote:            return f(get_current_context(), *args, **kwargs)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/pipenv/cli.py", line 62, in cli
remote:            from . import core
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/pipenv/core.py", line 30, in <module>
remote:            from requests.packages.urllib3.exceptions import InsecureRequestWarning
remote:        ImportError: cannot import name 'InsecureRequestWarning'
remote:  !     Push rejected, failed to compile Python app.
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !    Push rejected to fwdform2.
remote: 
To https://git.heroku.com/fwdform2.git
 ! [remote rejected] testing -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/fwdform2.git'

It looks like Heroku's Python buildpack, specifically pipenv, is broken. Any ideas?

Python version (runtime.txt): 3.6.4


Solution

  • There was a bug with Pipenv and Heroku's buildpack, which has since been rectified.

    If anyone runs into a similar issue in the future, you can fork Heroku's buildpack and alter the pinned Pipenv version, or make any other necessary changes.

    Push your fork, then setup your application to use your forked buildpack e.g.

    heroku buildpacks:set https://github.com/Benjamin-Dobell/heroku-buildpack-python.git\#7e0da719744f0f5185a624d38877effa142d6639
    

    Kenneth Reitz of Salesforce/Heroku also suggested the use of the following commands to purge any Pipenv/buildpack related issues:

    heroku plugins:install heroku-repo
    heroku repo:purge_cache