Проблемы с установкой pycryptodome

Вопрос или проблема

Я изменил BIOS своего Thinkpad, чтобы удалить белый список для Wi-Fi, и планирую перепрошить модифицированный BIOS обратно на EEPROM. Для этого мне нужно использовать инструмент под названием thinkpad-uefi-sign, который подписывает образ, чтобы он мог загружаться. 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 и настроил venv (виртуальную среду) с помощью python3 -m venv /path/to/venv. Я установил pycryptodome в venv с помощью

/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

и снова наткнулся на ту же ошибку. После этого я попытался установить pycryptodomex, Crypto и pycrypto с помощью pip3 из venv, но все равно столкнулся с ошибкой при запуске программы. Я также попытался воспользоваться ответами из этого другого поста, но это не помогло. Я также пробовал использовать 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'

Мне удалось запустить программное обеспечение для подписи после активации python venv, как указывалось в комментарии Панки. Я сделал это для bash, используя команду

$ source <venv>/bin/activate

из документации python.

Эта библиотека имеет функцию с версии 3.4.1:

3.4.1 (21 февраля 2016)

Новые функции

  • Добавлен вариант установить библиотеку под пакетом Cryptodome (вместо Crypto).

И действительно, это необходимо, чтобы избежать конфликта со старой библиотекой PyCrypto, если обе установлены или используются одновременно, как указано в источниках:

либо:

Почти полностью взаимозаменяемая замена для старой библиотеки PyCrypto.

Устанавливаете её с помощью::

pip install pycryptodome
В этом случае все модули устанавливаются под пакетом `Crypto`. Вы можете проверить, что все в порядке с помощью::

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

Необходимо избегать установки и PyCrypto, и PyCryptodome одновременно, так как они будут мешать друг другу. Этот вариант рекомендуется только в том случае, если вы уверены, что все приложение развернуто в virtualenv.

или:

библиотека, независимая от старого PyCrypto.

Вы устанавливаете ее с помощью::

pip install pycryptodomex
Вы можете проверить, что все в порядке с помощью::

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

В этом случае все модули устанавливаются под пакетом Cryptodome.
Старая библиотека PyCrypto и PyCryptodome могут сосуществовать.

Debian как дистрибьютор выбрал этот вариант, чтобы избежать возможных конфликтов (даже если он вообще не предоставляет старую библиотеку 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): замените Crypto на Cryptodome в sign.py и verify.py.

Ответ или решение

Проблемы с установкой PyCryptodome: Решение проблемы с ModuleNotFoundError: No module named 'Crypto'

Введение

При попытке работы с инструментом thinkpad-uefi-sign, который требует библиотеку pycryptodome, вы столкнулись с проблемой, связанной с отсутствием модуля Crypto. Несмотря на то, что вы уже пробовали несколько методов установки и настройки окружения, ошибка продолжает появляться. Давайте разберемся, как это исправить, основываясь на предоставленной вами информации.

Анализ проблемы

Вы установили pycryptodome с помощью команды:

apt install python3-pycryptodome

Однако, после попытки выполнить скрипт verify.py, вы получили ошибку:

ModuleNotFoundError: No module named 'Crypto'

Это указывает на то, что скрипт не может найти установленный модуль, что часто является следствием несовместимости пакетов или неправильной среды выполнения.

Возможные причины и решения

  1. Проблемы с окружением:

    • Убедитесь, что вы активировали виртуальное окружение перед выполнением скрипта. Вы упомянули, что сделали это, используя команду:
      source /path/to/venv/bin/activate

      Это должно корректно настроить окружение для работы с библиотеками, установленными в виртуальном окружении.

  2. Использование верной версии модуля:

    • Важно отметить, что библиотека pycryptodome должна быть корректно установлена в виртуальном окружении. Для этого попробуйте снова установить библиотеку, убедившись, что вы находитесь в активированном виртуальном окружении:
      pip install pycryptodome
    • Убедитесь, что у вас нет конфликтующих библиотек, таких как PyCrypto. Если они установлены, удалите их:
      pip uninstall PyCrypto
  3. Проблемы с названиями пространств:

    • Так как Debian может использовать особую установку библиотеки с пространством имен Cryptodome, есть шанс, что в вашем скрипте verify.py используется старое пространство имен Crypto. Проверьте и измените любой импорт:
      from Crypto.PublicKey import RSA

      на:

      from Cryptodome.PublicKey import RSA

      Это изменение позволит вашему коду правильно обратиться к установленной библиотеке в Debian.

  4. Использование pycryptodomex:

    • В качестве альтернативы, вы также можете использовать pycryptodomex, который позволяет избежать конфликтов с PyCrypto. Чтобы его установить, выполните команду:
      pip install pycryptodomex

      После чего измените импорты в своем коде, аналогично вышеприведенному примеру, на Cryptodome.

  5. Проверка зависимостей:

    • Убедитесь, что все зависимости установлены корректно, и выполните тесты, предложенные в документации:
      pip install pycryptodome-test-vectors
      python -m Cryptodome.SelfTest

Заключение

Следуя перечисленным шагам, вы сможете справиться с ошибками, связанными с установкой и использованием pycryptodome в вашем проекте. Если проблема сохраняется, может оказаться полезным обратиться к сообществу разработчиков или рассмотреть возможность использования других инструментов для подписи, которые могут оказаться более совместимыми с вашей операционной системой.

Оцените материал
Добавить комментарий

Капча загружается...