您需要用 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 块,但在文件最开头的这种构造不会甚至看起来非常好。有没有更“漂亮”的方法来做到这一点?
包装中存在明显的混乱。
最初,该模块
Crypto作为包安装pycrypto。但这个包写得歪歪扭扭,包含错误和漏洞,最后一次发布是在2013年,三年前终于被放弃了。然而他创造了Python世界常用的接口,十年前一群战友发起了一个项目来彻底改造
pycrypto。该项目名为pycryptodome.它被设计为的替代品pycrypto,因此将代码安装在同一模块中Crypto。但!出于不同的目的 - 例如共享pycrypto,pycryptodome有一个包pycryptodomex安装了与相同的代码pycryptodome,但在一个模块中Cryptodome。如果你想听听我的意见,我总是安装
pycryptodomex并使用Cryptodome.由于我生活在pycrypto、 和都在使用的时代pycryptodome,为了不混淆我到底安装了什么,我习惯了将旧代码放入Crypto,将新代码放入Cryptodome。如果您在 Windows 和 Linux 上安装该软件包
pycryptodomex,那么在这两个系统中您将拥有名为 的模块Cryptodome,并且您不需要围住花园。作为一个想法(无法亲自检查):