Search code examples
pythonhttpie

httpie still use python 2.7 when python 3 is installed


I installed httpie via command

sudo yum install httpie

python3 command is on the PATH. But when I run http command it still use python 2.7 which cause error.

http command error

    Traceback (most recent call last):
  File "/usr/bin/http", line 9, in <module>
    load_entry_point('httpie==0.9.4', 'console_scripts', 'http')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2443, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2449, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/httpie/__main__.py", line 5, in <module>
    from .core import main
  File "/usr/lib/python2.7/site-packages/httpie/core.py", line 17, in <module>
    import requests
  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 58, in <module>
    from . import utils
  File "/usr/lib/python2.7/site-packages/requests/utils.py", line 32, in <module>
    from .exceptions import InvalidURL
  File "/usr/lib/python2.7/site-packages/requests/exceptions.py", line 10, in <module>
    from urllib3.exceptions import HTTPError as BaseHTTPError
  File "/usr/lib/python2.7/site-packages/urllib3/__init__.py", line 10, in <module>
    from .connectionpool import (
  File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 31, in <module>
    from .connection import (
  File "/usr/lib/python2.7/site-packages/urllib3/connection.py", line 45, in <module>
    from .util.ssl_ import (
  File "/usr/lib/python2.7/site-packages/urllib3/util/__init__.py", line 5, in <module>
    from .request import make_headers
  File "/usr/lib/python2.7/site-packages/urllib3/util/request.py", line 5, in <module>
    from ..exceptions import UnrewindableBodyError
ImportError: cannot import name UnrewindableBodyError

I can confirm python 3 is installed, python shell when I run python command

Python 3.8.5 (default, Sep  4 2020, 07:30:14)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Solution

  • Without knowing your OS and its version, it will be a guess answer :)

    I bet you are running an old Fedora version or CentOS?

    If that's the case, the HTTPie version is very old (0.9.4), and at that time it was bundled using Python 2. So when you do sudo yum install httpie it will install http and https executable as Python 2 modules.

    One solution that was proposed in comments is to use python3 -m pip install --upgrade httpie: it will make sure you are installing HTTPie for Python 3. And http & https executable will be available too. If you do so, you must first remove the HTTPie version you installed via yum.