pyxero: ImportError: No module named jwt.algorithms

After installing pyxero 0.7.0 via pip, and attempting to connect to a Private Application, I get the following ImportError:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/xero/manager.py", line 177, in wrapper
    params=params, cert=cert, timeout=timeout)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 60, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 443, in request
    prep = self.prepare_request(req)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 374, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 308, in prepare
    self.prepare_auth(auth, url)
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 492, in prepare_auth
    r = auth(self)
  File "/usr/local/lib/python2.7/dist-packages/requests_oauthlib/oauth1_auth.py", line 87, in __call__
    unicode(r.url), unicode(r.method), None, r.headers)
  File "/usr/local/lib/python2.7/dist-packages/oauthlib/oauth1/rfc5849/__init__.py", line 313, in sign
    ('oauth_signature', self.get_oauth_signature(request)))
  File "/usr/local/lib/python2.7/dist-packages/oauthlib/oauth1/rfc5849/__init__.py", line 150, in get_oauth_signature
    sig = self.SIGNATURE_METHODS[self.signature_method](base_string, self)
  File "/usr/local/lib/python2.7/dist-packages/oauthlib/oauth1/rfc5849/signature.py", line 505, in sign_rsa_sha1_with_client
    return sign_rsa_sha1(base_string, client.rsa_key)
  File "/usr/local/lib/python2.7/dist-packages/oauthlib/oauth1/rfc5849/signature.py", line 496, in sign_rsa_sha1
    alg = _jwt_rs1_signing_algorithm()
  File "/usr/local/lib/python2.7/dist-packages/oauthlib/oauth1/rfc5849/signature.py", line 473, in _jwt_rs1_signing_algorithm
    import jwt.algorithms as jwtalgo
ImportError: No module named jwt.algorithms

I’ve tried this on Gentoo and Ubuntu, with the same results. On Gentoo, I then installed pyjwt with pip, and got this:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/xero/manager.py", line 177, in wrapper
    params=params, cert=cert, timeout=timeout)
  File "/usr/lib64/python2.7/site-packages/requests-2.7.0-py2.7.egg/requests/api.py", line 122, in put
    return request('put', url, data=data, **kwargs)
  File "/usr/lib64/python2.7/site-packages/requests-2.7.0-py2.7.egg/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/usr/lib64/python2.7/site-packages/requests-2.7.0-py2.7.egg/requests/sessions.py", line 451, in request
    prep = self.prepare_request(req)
  File "/usr/lib64/python2.7/site-packages/requests-2.7.0-py2.7.egg/requests/sessions.py", line 382, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/usr/lib64/python2.7/site-packages/requests-2.7.0-py2.7.egg/requests/models.py", line 308, in prepare
    self.prepare_auth(auth, url)
  File "/usr/lib64/python2.7/site-packages/requests-2.7.0-py2.7.egg/requests/models.py", line 496, in prepare_auth
    r = auth(self)
  File "/usr/lib64/python2.7/site-packages/requests_oauthlib-0.5.0-py2.7.egg/requests_oauthlib/oauth1_auth.py", line 79, in __call__
    unicode(r.url), unicode(r.method), r.body or '', r.headers)
  File "build/bdist.linux-x86_64/egg/oauthlib/oauth1/rfc5849/__init__.py", line 313, in sign
    ('oauth_signature', self.get_oauth_signature(request)))
  File "build/bdist.linux-x86_64/egg/oauthlib/oauth1/rfc5849/__init__.py", line 150, in get_oauth_signature
    sig = self.SIGNATURE_METHODS[self.signature_method](base_string, self)
  File "build/bdist.linux-x86_64/egg/oauthlib/oauth1/rfc5849/signature.py", line 505, in sign_rsa_sha1_with_client
    return sign_rsa_sha1(base_string, client.rsa_key)
  File "build/bdist.linux-x86_64/egg/oauthlib/oauth1/rfc5849/signature.py", line 496, in sign_rsa_sha1
    alg = _jwt_rs1_signing_algorithm()
  File "build/bdist.linux-x86_64/egg/oauthlib/oauth1/rfc5849/signature.py", line 474, in _jwt_rs1_signing_algorithm
    _jwtrs1 = jwtalgo.RSAAlgorithm(jwtalgo.hashes.SHA1)
AttributeError: 'module' object has no attribute 'RSAAlgorithm'

Installing python-jwt on the Ubuntu machine made no difference.

PyCrypto is installed (2.6.1) on both machines. JWT appears to be required, pip doesn’t install it automatically as a dependency, but even when it is installed, the thing doesn’t seem to be able to load up the crypto libraries it wants. Am I taking crazy pills, or is something very wrong here?

About this issue

  • Original URL
  • State: closed
  • Created 9 years ago
  • Comments: 16 (4 by maintainers)

Commits related to this issue

Most upvoted comments

Installing pip install cryptography as per https://github.com/freakboy3742/pyxero/issues/90 fixed it for me (Python 3.5.1, latest release of all packages)

I just got this error using pyxero 0.7.0 with Python 2.7.6 on pythonanywhere.com. Downgrading to oauthlib 0.7.2 solved the issue for me.

pip install oauthlib==0.7.2