使用cx_Freeze转.py为exe时出现No module named '_cffi_backend'错误求助
解决cx_Freeze打包exe时
ModuleNotFoundError: No module named '_cffi_backend'的问题 这个问题我之前碰到过,本质是cx_Freeze的自动依赖检测漏掉了bcrypt依赖的_cffi_backend模块——毕竟这类C扩展模块有时候不会被自动扫描到。给你几个实用的解决办法:
方法1:在setup.py里手动指定要包含的模块
修改你的cx_Freeze配置文件(一般是setup.py),在build_exe选项里添加includes参数,明确把_cffi_backend和bcrypt都加进去,让cx_Freeze强制打包这些模块:
import sys from cx_Freeze import setup, Executable # 替换成你的主脚本文件名 main_script = "borzacommercial.py" # Windows平台下如果是GUI程序用Win32GUI,控制台程序可以把base设为None base = "Win32GUI" if sys.platform == "win32" else None executables = [Executable(main_script, base=base)] build_options = { "includes": ["_cffi_backend", "bcrypt"], # 你原来的其他配置比如packages、include_files等可以继续保留 } setup( name="BorzaCommercial", version="1.0", description="你的应用描述", options={"build_exe": build_options}, executables=executables )
改完之后重新运行打包命令:python setup.py build
方法2:重新安装bcrypt和cffi依赖
有时候依赖安装不完整也会引发这个问题,先卸载再重新安装试试:
pip uninstall -y bcrypt cffi pip install bcrypt cffi
安装完成后再重新执行打包流程。
方法3:手动复制模块到打包目录
如果上面两种方法都不行,你可以手动找到_cffi_backend.pyd文件——它在你的Python安装目录的Lib\site-packages\cffi文件夹里,把这个文件复制到打包生成的build\exe.win32-3.6(路径里的版本号对应你用的Python3.6)目录下,然后再运行exe就应该能正常启动了。
为啥之前的脚本没问题?
因为你之前打包的脚本没用到bcrypt,自然不会触发这个依赖遗漏的问题,这次脚本用到了bcrypt,而bcrypt底层依赖cffi的C扩展模块,cx_Freeze没自动识别到,所以就报错了。
内容的提问来源于stack exchange,提问作者TAJLN
相关产品推荐
相关产品推荐

