使用cx_Freeze构建setup.py时出现linux-vdso.so.1不存在错误
解决cx_Freeze打包时找不到linux-vdso.so.1的问题
问题场景
为依赖numba、pyglet和numpy的main.py编写了如下setup.py脚本:
# 注:原代码遗漏了from关键字,已修正 from cx_Freeze import setup, Executable build_exe_options = { "packages": ["pyglet", "llvmlite", "numpy", "numba"], "excludes": ["tkinter", "pygame"]} base = None if sys.platform == "win32": base = "Win32GUI" setup( name="guifoo", version="0.1", description="My GUI application!", options={"build_exe": build_exe_options}, executables=[Executable("main.py", base=base)], )
执行python setup.py build时持续报错:
creating directory /home/onuelito/Documents/Python Projects/paint/build/exe.linux-x86_64-3.10/lib copying /home/onuelito/.local/lib/python3.10/site-packages/cx_Freeze/bases/lib/libcrypt-796a3fb8.so.2 -> /home/onuelito/Documents/Python Projects/paint/build/exe.linux-x86_64-3.10/lib/libcrypt-796a3fb8.so.2 copying linux-vdso.so.1 -> /home/onuelito/Documents/Python Projects/paint/build/exe.linux-x86_64-3.10/lib/linux-vdso.so.1 error: [Errno 2] No such file or directory: 'linux-vdso.so.1'
操作系统为Manjaro XFCE。
问题原因
linux-vdso.so.1是Linux内核提供的虚拟动态共享对象,并非磁盘上存在的真实文件,cx_Freeze错误地将其判定为需要复制的依赖库,因此触发找不到文件的错误。
解决方法
1. 在打包配置中排除虚拟库
修改build_exe_options,新增bin_excludes项跳过该虚拟库:
build_exe_options = { "packages": ["pyglet", "llvmlite", "numpy", "numba"], "excludes": ["tkinter", "pygame"], "bin_excludes": ["linux-vdso.so.1"] # 添加此行排除虚拟库 }
2. 升级cx_Freeze到最新版本
该问题属于cx_Freeze的已知bug,后续版本已修复。执行以下命令升级:
pip install --upgrade cx_Freeze
3. 临时创建符号链接(不推荐)
若暂时无法升级cx_Freeze,可临时创建一个指向真实系统库的符号链接作为临时 workaround:
sudo ln -s /usr/lib/libc.so.6 /usr/lib/linux-vdso.so.1
打包完成后记得删除该链接:
sudo rm /usr/lib/linux-vdso.so.1
内容的提问来源于stack exchange,提问作者Onuelito
相关产品推荐
相关产品推荐

