Вопрос или проблема
Я изменил 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
Эта библиотека имеет функцию с версии 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):
touch .separate_namespace
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'
Это указывает на то, что скрипт не может найти установленный модуль, что часто является следствием несовместимости пакетов или неправильной среды выполнения.
Возможные причины и решения
-
Проблемы с окружением:
- Убедитесь, что вы активировали виртуальное окружение перед выполнением скрипта. Вы упомянули, что сделали это, используя команду:
source /path/to/venv/bin/activate
Это должно корректно настроить окружение для работы с библиотеками, установленными в виртуальном окружении.
- Убедитесь, что вы активировали виртуальное окружение перед выполнением скрипта. Вы упомянули, что сделали это, используя команду:
-
Использование верной версии модуля:
- Важно отметить, что библиотека
pycryptodome
должна быть корректно установлена в виртуальном окружении. Для этого попробуйте снова установить библиотеку, убедившись, что вы находитесь в активированном виртуальном окружении:pip install pycryptodome
- Убедитесь, что у вас нет конфликтующих библиотек, таких как
PyCrypto
. Если они установлены, удалите их:pip uninstall PyCrypto
- Важно отметить, что библиотека
-
Проблемы с названиями пространств:
- Так как Debian может использовать особую установку библиотеки с пространством имен
Cryptodome
, есть шанс, что в вашем скриптеverify.py
используется старое пространство именCrypto
. Проверьте и измените любой импорт:from Crypto.PublicKey import RSA
на:
from Cryptodome.PublicKey import RSA
Это изменение позволит вашему коду правильно обратиться к установленной библиотеке в Debian.
- Так как Debian может использовать особую установку библиотеки с пространством имен
-
Использование
pycryptodomex
:- В качестве альтернативы, вы также можете использовать
pycryptodomex
, который позволяет избежать конфликтов сPyCrypto
. Чтобы его установить, выполните команду:pip install pycryptodomex
После чего измените импорты в своем коде, аналогично вышеприведенному примеру, на
Cryptodome
.
- В качестве альтернативы, вы также можете использовать
-
Проверка зависимостей:
- Убедитесь, что все зависимости установлены корректно, и выполните тесты, предложенные в документации:
pip install pycryptodome-test-vectors python -m Cryptodome.SelfTest
- Убедитесь, что все зависимости установлены корректно, и выполните тесты, предложенные в документации:
Заключение
Следуя перечисленным шагам, вы сможете справиться с ошибками, связанными с установкой и использованием pycryptodome
в вашем проекте. Если проблема сохраняется, может оказаться полезным обратиться к сообществу разработчиков или рассмотреть возможность использования других инструментов для подписи, которые могут оказаться более совместимыми с вашей операционной системой.