Linux下Python安装cryptography成功却无法导入的问题
Linux环境下,Python 3.10.6(路径/usr/bin/python)搭配pip 22.3.1,安装cryptography时日志显示成功,但执行python -c "import cryptography"报错ModuleNotFoundError: No module named 'cryptography'。即使使用python3.10 -m pip install cryptography重新安装,仍无法导入。安装时出现Defaulting to user installation because normal site-packages is not writeable警告,执行python -m pip show cryptography提示未找到包。
安装时的警告说明:由于系统级site-packages目录无写入权限,pip将包安装到了用户级site-packages目录,但当前Python解释器的模块搜索路径sys.path未包含该目录,导致无法找到已安装的cryptography。
1. 定位用户级site-packages路径
执行以下命令,获取pip安装用户级包的目录:
python3.10 -m site --user-site
输出示例:/home/your-user/.local/lib/python3.10/site-packages
2. 验证包是否真的安装
检查该目录下是否存在cryptography:
ls $(python3.10 -m site --user-site)/cryptography
若输出目录内容,说明包已成功安装,仅需让Python识别该路径即可。
3. 让Python识别用户级路径
临时生效方案(单次会话)
运行Python时通过环境变量指定路径:
PYTHONPATH=$(python3.10 -m site --user-site) python -c "import cryptography; print('导入成功')"
永久生效方案
方案A:修改shell配置文件
编辑~/.bashrc(若使用zsh则编辑~/.zshrc):
echo "export PYTHONPATH=$(python3.10 -m site --user-site):\$PYTHONPATH" >> ~/.bashrc
生效配置:
source ~/.bashrc
之后重新打开终端,即可正常导入cryptography。
方案B:创建Python用户配置文件
在用户级site-packages目录的上级(通常是~/.local/lib/python3.10)创建usercustomize.py文件:
echo "import sys; sys.path.append('$(python3.10 -m site --user-site)')" > ~/.local/lib/python3.10/usercustomize.py
Python启动时会自动加载该文件,添加路径到sys.path。
4. 备选方案:系统级安装(需sudo权限)
如果有管理员权限,直接安装到系统级site-packages,避免路径问题:
sudo python3.10 -m pip install cryptography
安装后无需额外配置,即可直接导入。
内容的提问来源于stack exchange,提问作者Zak345

