sematic icon indicating copy to clipboard operation
sematic copied to clipboard

Exception on `sematic start` after installation

Open idow09 opened this issue 2 years ago • 2 comments

After installing sematic for the first time, I try to start and get the following exception. I tried to dig in a bit but didn't find an obvious solution...

python version: Python 3.9.7

11:07:21 root@6b93e1bb3779 algo ±|dev ✗|→ sematic start
Traceback (most recent call last):
  File "/opt/pyenv/versions/3.9.7/bin/sematic", line 5, in <module>
    from sematic.cli.main import cli
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/sematic/cli/main.py", line 5, in <module>
    import sematic.cli.start  # noqa: F401
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/sematic/cli/start.py", line 12, in <module>
    from sematic.api.server import run_wsgi
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/sematic/api/server.py", line 7, in <module>
    import eventlet
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/__init__.py", line 17, in <module>
    from eventlet import convenience
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/convenience.py", line 7, in <module>
    from eventlet.green import socket
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/green/socket.py", line 21, in <module>
    from eventlet.support import greendns
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/support/greendns.py", line 66, in <module>
    setattr(dns, pkg, import_patched('dns.' + pkg))
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/support/greendns.py", line 61, in import_patched
    return patcher.import_patched(module_name, **modules)
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/patcher.py", line 129, in import_patched
    return inject(
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/eventlet/patcher.py", line 106, in inject
    module = __import__(module_name, {}, {}, module_name.split('.')[:-1])
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/dns/dnssec.py", line 483, in <module>
    from Crypto.PublicKey import RSA as CryptoRSA, DSA as CryptoDSA
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/Crypto/PublicKey/__init__.py", line 21, in <module>
    from Crypto.Util.asn1 import (DerSequence, DerInteger, DerBitString,
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/Crypto/Util/asn1.py", line 27, in <module>
    from Crypto.Util.number import long_to_bytes, bytes_to_long
  File "/opt/pyenv/versions/3.9.7/lib/python3.9/site-packages/Crypto/Util/number.py", line 399
    s = pack('>I', n & 0xffffffffL) + s
                                 ^
SyntaxError: invalid syntax

(What else is required for a diagnosis?)

idow09 avatar Sep 15 '22 11:09 idow09

It appears that your version of eventlet depends transitively on a lib that claims to be python3 compatible but is actually not. Can you do pip freeze | grep eventlet and tell me what version of eventlet you're running? I've got 0.30.2. You can do pip install eventlet==0.30.2 to install that version. Then try sematic again. Let me know how it goes!

augray avatar Sep 15 '22 16:09 augray

I should mention that unless eventlet has updated their allowed dependencies, it could be that pip just happened to randomly resolve to that lib, and you'll have to pip install a pinned version of another dependency. The full chain appears to be sematic => eventlet => dns => Crypto, with the true violation lying in Crypto. FWIW, my env doesn't have the Crypto lib at all. I have dnspython==1.16.0, so if pinning eventlet doesn't work for you, you can try pinning dnspython.

augray avatar Sep 15 '22 16:09 augray