sematic
sematic copied to clipboard
Exception on `sematic start` after installation
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?)
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!
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
.