安装 pycryptodome 时出现问题

安装 pycryptodome 时出现问题

我已经修改了我的thinkpad的BIOS以删除wifi白名单并计划将修改后的BIOS刷新回eeprom。为此,我必须使用一个名为的工具thinkpad-uefi-标志它对映像进行签名,以便它可以启动。 Thinkpad-uefi-sign 需要使用 pycryptodome。我安装了它使用

apt install python3-pycryptodome

但是它仍然不起作用并出现错误

ModuleNotFoundError: No module named 'Crypto'

当我运行 thinkpad-uefi-sign/verify.py 时。我正在使用 Debian Testing Trixie 以及最新的软件包和 Python 3.11.5。

我尝试的另一件事是使用安装它

pip install pycryptodome

然而,这给出了一个警告,它可能会破坏软件包并使用 apt install python-xyz 来安装它。然后我安装了 python3-full 并使用 python3 -m venv /path/to/venv 设置了 venv(虚拟环境)。我使用以下命令在 venv 中安装了 pycryptodome

/path/to/venv/bin/pip3 install pycryptodome

然后我运行脚本 thinkpad-uefi-sign/verify.py

/path/to/venv/bin/python3 thinkpad-uefi-sign/verify.py Bios_Modded.bin

仍然遇到同样的错误。之后,我尝试使用 venv 中的 pip3 安装 pycryptodomex、Crypto 和 pycrypto,但在运行程序时仍然遇到错误。我还尝试尝试以下答案这另一篇文章,但并没有多大帮助。我还尝试使用 MacBook,由于某种原因它似乎可以在那里工作,因此这可能是与包装相关的问题。将其封装起来可能会有所帮助,这是命令和完整输出。

$ ./python3_venv_with_pycryptodome/bin/python3 thinkpad-uefi-sign/verify.py Bios_Modded.bin
Traceback (most recent call last):
  File "/home/witherslayer/Sowa/ThkpX1CG2_UEFIs/workflow/thinkpad-uefi-sign/verify.py", line 19, in <module>
    from Crypto.PublicKey import RSA
ModuleNotFoundError: No module named 'Crypto'

答案1

正如 Panki 的评论所述,激活 python venv 后,我能够运行签名软件。我使用以下命令为 bash 执行此操作

$ source <venv>/bin/activate

来自python 文档

答案2

该库从 3.4.1 开始有一个功能:

3.4.1(2016 年 2 月 21 日)

新功能

  • 添加了在包下安装库的选项Cryptodome(而不是Crypto)。

事实上,如果同时安装或使用旧的 PyCrypto 库,则需要避免与旧的 PyCrypto 库发生冲突,如源中所述:

任何一个:

几乎是旧 PyCrypto 库的直接替代品。

You install it with::

pip install pycryptodome
In this case, all modules are installed under the `Crypto` package. You can test everything is right with::
  
pip install pycryptodome-test-vectors
python -m Crypto.SelfTest

必须避免同时拥有 PyCrypto 和 PyCryptodome同时安装,因为它们会互相干扰。因此,仅当您确定整个应用程序部署在virtualenv.

或者:

独立于旧 PyCrypto 的库。

您可以使用以下命令安装它:

pip install pycryptodomex
You can test everything is right with::

pip install pycryptodome-test-vectors
python -m Cryptodome.SelfTest

在这种情况下,所有模块都安装在该Cryptodome包下。旧的 PyCrypto 和 PyCryptodome 可以共存。

Debian 作为 aa 发行商选择此选项是为了避免任何潜在的冲突(即使它根本不提供旧的 PyCrypto):

debian/rules:

touch .separate_namespace

setup.py:

use_separate_namespace = os.path.isfile(".separate_namespace")
other_project = "pycryptodomex"
other_root = "Cryptodome"
if use_separate_namespace:
    project_name, other_project = other_project, project_name
    package_root, other_root = other_root, package_root 

最后也可以使用 Debian 的打包库(不带 venv):替换CryptoCryptodomeinsign.pyverify.py

相关内容