Closed sbaier1 closed 2 years ago
Hi! Looks like a problem with the Pycryptodome, one of the dependencies. Potentially connected:
@robin-nitrokey Can you take a look?
FWIW i'm trying to build the failing dependencies from source, so far i've done:
arch -arm64 pip3 install pycryptodome==3.14.1 --no-binary :all: --force-reinstall
and
arch -arm64 pip3 install cffi cryptography==36.0.2 --force-reinstall --no-binary :all:
but it still fails after successfully installing these:
nitropy
Traceback (most recent call last):
File "/opt/homebrew/bin/nitropy", line 5, in <module>
from pynitrokey.cli import main
File "/opt/homebrew/lib/python3.9/site-packages/pynitrokey/cli/__init__.py", line 19, in <module>
import pynitrokey.fido2.operations
File "/opt/homebrew/lib/python3.9/site-packages/pynitrokey/fido2/__init__.py", line 10, in <module>
from pynitrokey.fido2.client import NKFido2Client
File "/opt/homebrew/lib/python3.9/site-packages/pynitrokey/fido2/client.py", line 21, in <module>
from cryptography import x509
File "/opt/homebrew/lib/python3.9/site-packages/cryptography/x509/__init__.py", line 6, in <module>
from cryptography.x509 import certificate_transparency
File "/opt/homebrew/lib/python3.9/site-packages/cryptography/x509/certificate_transparency.py", line 10, in <module>
from cryptography.hazmat.bindings._rust import x509 as rust_x509
ImportError: dlopen(/opt/homebrew/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so, 0x0002): tried: '/opt/homebrew/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
@sbaier1 Can you please try the following steps to create a minimal reproducible example of this error?
python3 -m venv /tmp/venv
source /tmp/venv/bin/activate
pip install pycryptodome
python3
> from Crypto.PublicKey import ECC
If step 3 fails, please provide the output of step 2, python3 -VV
and python3 -m platform
.
fails with the same error:
>>> from Crypto.PublicKey import ECC
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/venv/lib/python3.9/site-packages/Crypto/PublicKey/ECC.py", line 57, in <module>
_ec_lib = load_pycryptodome_raw_lib("Crypto.PublicKey._ec_ws", """
File "/tmp/venv/lib/python3.9/site-packages/Crypto/Util/_raw_api.py", line 309, in load_pycryptodome_raw_lib
raise OSError("Cannot load native module '%s': %s" % (name, ", ".join(attempts)))
OSError: Cannot load native module 'Crypto.PublicKey._ec_ws': Not found '_ec_ws.cpython-39-darwin.so', Cannot load '_ec_ws.abi3.so': dlopen(/tmp/venv/lib/python3.9/site-packages/Crypto/Util/../PublicKey/_ec_ws.abi3.so, 0x0006): tried: '/tmp/venv/lib/python3.9/site-packages/Crypto/Util/../PublicKey/_ec_ws.abi3.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), '/private/tmp/venv/lib/python3.9/site-packages/Crypto/PublicKey/_ec_ws.abi3.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), Not found '_ec_ws.so'
>>>
$ python3 -m venv /tmp/venv
source /tmp/venv/bin/activate
$ pip install pycryptodome
Collecting pycryptodome
Using cached pycryptodome-3.14.1-cp35-abi3-macosx_12_0_arm64.whl
Installing collected packages: pycryptodome
Successfully installed pycryptodome-3.14.1
WARNING: You are using pip version 22.0.4; however, version 22.1.1 is available.
You should consider upgrading via the '/tmp/venv/bin/python3 -m pip install --upgrade pip' command.
$ python3 -m platform
macOS-12.3.1-arm64-arm-64bit
$ python3 -VV
Python 3.9.11 (main, Mar 29 2022, 14:04:34)
[Clang 12.0.0 ]
perhaps it could be related but i have some miniconda setup params in my zshrc.
Interesting. The pycryptodome-3.14.1-cp35-abi3-macosx_12_0_arm64.whl
file is not available on PyPI. It is probably cached from your manual built. Can you please remove the package and then repeat the pip install
step with the --no-cache-dir
and --verbose
option so that we see how it is installed from scratch?
source /tmp/venv/bin/activate
pip remove pycryptodome
pip install pycryptodome --no-cache-dir --verbose
Can you please remove the package and then repeat the
pip install
step with the--no-cache-dir
and--verbose
option so that we see how it is installed from scratch?
Interesting indeed, i ran it again with pip install pycryptodome --no-cache-dir --verbose --force-reinstall
and that fixed the issue. (Your test import works now).
It also still built some binaries though:
anyways: applying this same command to my base env and running nitropy
again it works as expected now. i'd consider this somewhat resolved (unnless you want to add a hint to your docs)
I’m glad that it’s working now. As I don’t see the underlying reason for the problem and it might be a one-time caching issue, I think we can close this issue for now. If you encounter this issue again or if other users experience it too, we can investigate further and update the installation instructions.
pip install pycryptodome --no-cache-dir --verbose --force-reinstall
I have tried it on my M1, but I get
ERROR: Command errored out with exit status 1: /Users/loreto/opt/miniconda3/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/dr/lzd3czf922qcgj0xpdyg3dc40000gn/T/pip-install-3lhdxoh9/pycryptodome_3d5818659ba54c90872d4993a0d9e451/setup.py'"'"'; __file__='"'"'/private/var/folders/dr/lzd3czf922qcgj0xpdyg3dc40000gn/T/pip-install-3lhdxoh9/pycryptodome_3d5818659ba54c90872d4993a0d9e451/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/dr/lzd3czf922qcgj0xpdyg3dc40000gn/T/pip-record-4rdpmt_6/install-record.txt --single-version-externally-managed --compile --install-headers /Users/loreto/opt/miniconda3/include/python3.9/pycryptodome Check the logs for full command output.
Same error :(
Same error :(
same error with 3.11 from brew, but works with 3.12 still from brew 🤷♂️
The install instructions for macOS don't work on M1 macs. Tried to install the CLI to use with my nitrokey 3 I installed into the homebrew python env (which worked) and then tried running the CLI.
Can't find any general info on this specific shared lib or why it's an x64 binary.