You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora下pyenv安装Python使用cryptacular.bcrypt报返回None错误

Fedora 34 pyenv环境cryptacular运行报错问题

问题说明

这是Fedora 34系统下的特定场景报错,仅通过pyenv安装的Python 3.9.7、3.8.12版本运行时触发,系统自带同版本Python运行无异常,目前暂无法确认问题根因属于pyenv还是cryptacular库。

复现步骤

  • 按照官方说明安装pyenv:先安装构建依赖,再安装pyenv,最后配置shell环境变量。
  • 使用pyenv安装Python 3.9.7,并设置为全局Python版本:
$ pyenv install 3.9.7
$ pyenv global 3.9.7
  • 创建虚拟环境,安装1.6.2版本的cryptacular:
$ python -m venv venv
$ ./venv/bin/pip install cryptacular
  • 新建minimal.py文件,写入测试代码:
from cryptacular.bcrypt import BCRYPTPasswordManager

pm = BCRYPTPasswordManager()
print(pm.encode("Password123!"))
  • 运行测试代码,触发报错:
$ ./venv/bin/python minimal.py
Traceback (most recent call last):
  File "/home/vagrant/minimal.py", line 4, in <module>
    pm.encode("Password123!")
  File "/home/vagrant/venv/lib/python3.9/site-packages/cryptacular/bcrypt/__init__.py", line 54, in encode
    raise ValueError("_bcrypt.crypt_rn returned None")
ValueError: _bcrypt.crypt_rn returned None
  • 切换到系统Python重复上述步骤,无报错可正常输出加密结果:
$ rm -rf venv
$ pyenv global system
$ python -m venv venv
$ ./venv/bin/pip install cryptacular
...
...
$ ./venv/bin/python minimal.py
$2a$10$mWRafuCTZq.OIZEt5CDln.LFWrj9qFnbjjhIHWL6pXZU4TU/tPm0K

排查思路与解决方案

  • 检查补全pyenv编译Python的依赖:Fedora 34中crypt_rn接口由libxcrypt-devel包提供,先执行dnf install libxcrypt-devel确认该包已安装,避免pyenv编译Python时缺失对应依赖导致底层接口调用异常。
  • 重新编译pyenv管理的Python版本:安装完缺失依赖后,执行pyenv uninstall 3.9.7卸载原有编译版本,再执行pyenv install 3.9.7重新编译,编译过程中注意检查输出是否有依赖相关的警告信息。
  • 强制重新编译cryptacular扩展:Python重新安装完成后,删除原有虚拟环境,重新创建虚拟环境后执行pip install --force-reinstall --no-cache-dir cryptacular,避免使用之前缓存的、基于不完整依赖编译的C扩展包。
  • 临时替代方案:如果上述操作无法解决问题,可直接使用官方bcrypt库替代cryptacular实现密码加密能力,接口调整成本极低,可直接规避当前环境冲突问题。

内容的提问来源于stack exchange,提问作者pxul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:30:03