This is the first time I’m deploying stuff to elasticbeanstalk, and when I’m trying to deploy my private project, I realized the eb cli I download is the version 2 and has different syntax. I installed the version 3, and it seems like it can only be installed using python package manager pip. After installing it, this is what I get:

rowanto@Rowanto-Deb ~ $ eb
Traceback (most recent call last):
  File "/usr/local/bin/eb", line 9, in <module>
    load_entry_point('awsebcli==3.0.10', 'console_scripts', 'eb')()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/", line 519, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/", line 2630, in load_entry_point
    return ep.load()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/", line 2310, in load
    return self.resolve()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/", line 2316, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/local/lib/python2.7/dist-packages/ebcli/core/", line 23, in <module>
    from ..controllers.initialize import InitController
  File "/usr/local/lib/python2.7/dist-packages/ebcli/controllers/", line 16, in <module>
    from ..core.abstractcontroller import AbstractBaseController
  File "/usr/local/lib/python2.7/dist-packages/ebcli/core/", line 21, in <module>
    from ..core import io, fileoperations, operations
  File "/usr/local/lib/python2.7/dist-packages/ebcli/core/", line 25, in <module>
    from ..lib import elasticbeanstalk, s3, iam, aws, ec2, elb
  File "/usr/local/lib/python2.7/dist-packages/ebcli/lib/", line 25, in <module>
    from ..lib import aws
  File "/usr/local/lib/python2.7/dist-packages/ebcli/lib/", line 17, in <module>
    import botocore_eb.session
  File "/usr/local/lib/python2.7/dist-packages/botocore_eb/", line 27, in <module>
    import botocore_eb.credentials
  File "/usr/local/lib/python2.7/dist-packages/botocore_eb/", line 27, in <module>
    from botocore_eb.utils import InstanceMetadataFetcher, parse_key_val_file
  File "/usr/local/lib/python2.7/dist-packages/botocore_eb/", line 22, in <module>
    from botocore_eb.vendored import requests
  File "/usr/local/lib/python2.7/dist-packages/botocore_eb/vendored/requests/", line 53, in <module>
    from .packages.urllib3.contrib import pyopenssl
  File "/usr/local/lib/python2.7/dist-packages/botocore_eb/vendored/requests/packages/urllib3/contrib/", line 55, in <module>
    orig_connectionpool_ssl_wrap_socket = connectionpool.ssl_wrap_socket
AttributeError: 'module' object has no attribute 'ssl_wrap_socket'
rowanto@Rowanto-Deb ~ $ 

And I’m like, what? Googling around the last line returns you many result, but not those relevant with the eb cli v3. There’s also a post which suggest that we use the bundle version (it’s a zip file) of aws cli, but I can’t find a bundle version of eb cli. Long story short, I found this post which helped me to fix the problem. Thanks to @guss77!

You just need to run these two lines:

sudo apt-get purge python-ndg-httpsclient
sudo pip install ndg-httpsclient==0.3.1

Basically, it just removes the problematic package and install it using the python package manager (a.k.a pip). It works for me, and I hope it works for you too!