Ubuntu18.04下Python3.10缺失libpython3.10.so致PyInstaller运行失败求助
问题:Ubuntu 18.04源码编译Python3.10.5后PyInstaller打包失败,缺少libpython3.10m.so
- 我在Ubuntu 18.04系统中从源码编译安装了Python 3.10.5,使用PyInstaller打包时报错;但系统自带的Python 3.6搭配PyInstaller时能正常找到
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0并运行。 - 当前机器里只有
libpython3.10.a文件,没有libpython3.10m.so,怀疑这是报错原因,想确认:- 是否获取到
libpython3.10m.so就能解决问题? - 如何获取或编译生成这个文件?
- 是否获取到
报错信息
INFO: Python library not in binary dependencies. Doing additional searching... Traceback (most recent call last): File "/usr/local/lib/python3.10/runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/local/lib/python3.10/runpy.py", line 86, in _run_code exec(code, run_globals) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/__main__.py", line 134, in <module> run() File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/__main__.py", line 124, in run run_build(pyi_config, spec_file, **vars(args)) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/__main__.py", line 58, in run_build PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 782, in main build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build')) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 714, in build exec(code, spec_namespace) File "/home/jenkins/workspace/TOOLS/tools-helper-build-python3-linux/hosttools/python/maxwell_dm.spec", line 7, in <module> a = Analysis(['maxwell_dm_gui/app_entry.py'], File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 277, in __init__ self.__postinit__() File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/building/datastruct.py", line 155, in __postinit__ self.assemble() File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 501, in assemble self._check_python_library(self.binaries) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 605, in _check_python_library python_lib = bindepend.get_python_library_path() File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/depend/bindepend.py", line 897, in get_python_library_path python_libname = findLibrary(name) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/depend/bindepend.py", line 775, in findLibrary lib = _which_library(name, paths) File "/home/jenkins/.local/lib/python3.10/site-packages/PyInstaller/depend/bindepend.py", line 806, in _which_library for _path in os.listdir(path): FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib64'
解答
1. 是否获取libpython3.10m.so就能解决问题?
是的。PyInstaller打包依赖Python的动态链接库(.so文件),静态库(.a文件)无法满足其动态链接需求。当前报错提示找不到/usr/lib64,本质是PyInstaller找不到Python 3.10的动态库,才会去搜索不存在的路径。生成libpython3.10m.so后,PyInstaller能正确识别到动态库,即可解决核心问题。
2. 如何编译生成libpython3.10m.so?
从源码编译Python时,默认可能未生成动态库,需要通过配置参数开启:
步骤1:清理原有编译产物
进入Python 3.10.5源码目录,清理之前的编译文件:
cd Python-3.10.5 make clean
步骤2:配置编译参数
执行configure命令时,添加强制生成动态库的参数:
./configure --enable-shared --enable-optimizations
--enable-shared:强制生成动态链接库libpython3.10m.so--enable-optimizations:开启编译优化(可选,推荐添加提升性能)
步骤3:编译并安装
make -j$(nproc) sudo make install
步骤4:更新动态库缓存
让系统识别新安装的动态库:
sudo ldconfig
验证生成结果
执行以下命令确认libpython3.10m.so是否存在:
ls /usr/local/lib/libpython3.10m.so
额外处理:解决/usr/lib64路径问题
如果生成动态库后仍提示找不到/usr/lib64,可手动创建软链接(Ubuntu 18.04默认使用/usr/lib/x86_64-linux-gnu而非/usr/lib64):
sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
内容的提问来源于stack exchange,提问作者quite68
相关产品推荐
相关产品推荐

