Импортировать библиотеку, которая в разных системах имеет разное имя модуля

Нужно написать программу на Python, которая должна работать как на Windows, так и на Linux. Но библиотека pycrypto в Windows устанавливается как Crypto, а в Kali Linux – как Cryptodome. Как сделать так, чтобы мой код запускался без каких-либо изменений как в Windows, так и в Linux?

Пробовал сделать так:

try:
    import Crypto
except ModuleNotFoundError:
    import Cryptodome as Crypto

Но с такой реализацией возникает проблема импорта подмодулей, например, Crypto.Cipher, Crypto.Hash и др., то есть для каждого придётся писать отдельный try-except блок, но такая конструкция в самом начале файла даже смотрится не очень. Есть ли какой-то более "красивый" способ это сделать?


Ответы (2 шт):

Автор решения: Fox Fox

В качестве идеи (нет возможности лично проверять):

import os
if os.name == "nt": import Crypto
else: import Cryptodome as Crypto
→ Ссылка
Автор решения: Pak Uula

Тут налицо путаница в пакетах.

Изначально модуль Crypto устанавливался пакетом pycrypto. Но этот пакет был написан кривовато, содержал ошибки и уязвимости, последний релиз был в 2013, и три года назад его окончательно забросили.

Однако он создал в мире Пайтона общеупотребимые интерфейсы, и группа товарищей десять лет назад запустила проект по тотальной переделке pycrypto. Проект назвали pycryptodome. Он проектировался как замена для pycrypto и поэтому устанавливал код в тот же модуль Crypto. Но! для разных целей - типа совместного использования pycrypto и pycryptodome, есть пакет pycryptodomex, который устанавливает тот же самый код что и pycryptodome, но в модуль Cryptodome.

Если вам интересно моё мнение, я всегда устанавливаю pycryptodomex и работаю с Cryptodome. Так как я застал те времена, когда в ходу были и pycrypto, и pycryptodome, то дабы не путаться в том, что именно у меня установлено, я привык ставить старый код в Crypto, а новый в Cryptodome.

Если вы и в Windows, и в Linux установите пакет pycryptodomex, то у вас в обеих системах будут модули с именем Cryptodome, и не потребуется огород городить.

→ Ссылка