代码里:
from Crypto.Cipher import AES
一跑就崩:
ModuleNotFoundError: No module named 'Crypto'
网上一查装个 pycrypto——别装,那个包 2013 年就停维护了,还有已知漏洞。
两个包,两个命名空间
现在的正主是这两个,装错任何一个都不通用:
| 包名 | 导入命名空间 |
|---|---|
pycryptodome | from Crypto... |
pycryptodomex | from Cryptodome... |
pycryptodome:兼容老代码,占用Crypto顶层名字pycryptodomex:改名版本,把命名空间挪到Cryptodome,避免和老pycrypto冲突
同一个环境里最多装一个。要是老代码用 from Crypto...,就装 pycryptodome。
装到虚拟环境里,别装到系统 Python
PyCharm / VSCode 打开项目通常自动激活了虚拟环境(比如 .venv),但你在别的终端 pip install 时可能装到系统 Python 去了:
pip install pycryptodome # 装哪儿了?看运气
最稳的写法是显式用当前项目的 Python:
D:\Projects\myapp\.venv\Scripts\python.exe -m pip install pycryptodome
或者:
py -m pip install pycryptodome # Windows py launcher
python -m pip install pycryptodome # 当前激活的解释器
检查装到哪里了
where python
python -c "import sys; print(sys.executable)"
python -m pip show pycryptodome
Location 字段就是包所在目录,肉眼比对一下是不是当前项目的 site-packages。
老代码遇到 pycryptodomex
某些镜像里预装的是 pycryptodomex。老代码不想改的话,兼容层写一下:
try:
from Crypto.Cipher import AES
except ImportError:
from Cryptodome.Cipher import AES
一句话总结
Crypto = pycryptodome,Cryptodome = pycryptodomex,二选一装到当前项目 Python 里。用 python -m pip install 比裸 pip install 稳。
