Linux下PyInstaller单文件编译运行报错及解决记录
Linux下PyInstaller编译单文件Python程序的库加载问题及解决
问题背景
在Linux环境中使用PyInstaller编译单文件Python程序时,编译过程成功,但运行生成的可执行文件时出现库加载失败的问题,该问题在更新依赖库后出现。
编译脚本
PYTHONOPTIMIZE=1 pyinstaller --clean \ --log-level DEBUG --noconfirm --onefile --nowindow \ --hidden-import=pkg_resources.py2_warn \ --add-data="sym/GesPomVuo18016.map:sym/" \ main_periodica.py \ --version-file ver/file_version_info.txt
依赖库版本列表
Package Version ------------------------- ----------- altgraph 0.17.4 certifi 2025.6.15 charset-normalizer 3.4.2 digimat.jobs 0.1.6 digimat.saia 0.1.71 future 1.0.0 idna 3.10 ipaddress 1.0.23 lxml 5.4.0 mysql-connector 2.2.9 netifaces 0.11.0 numpy 2.3.1 opcua 0.98.13 packaging 25.0 pip 25.1.1 prettytable 3.16.0 PTable 0.9.2 pyinstaller 6.14.1 pyinstaller-hooks-contrib 2025.5 pyModbusTCP 0.3.0 python-dateutil 2.9.0.post0 pytz 2025.2 requests 2.32.4 setuptools 80.9.0 six 1.17.0 Unidecode 1.4.0 urllib3 2.5.0 wcwidth 0.2.13 wheel 0.46.1
运行时错误信息
第一个错误
Traceback (most recent call last): File "main_periodica.py", line 6, in <module> File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module File "numpy/distutils/__init__.py", line 26, in <module> ImportError: cannot import name 'ccompiler' from partially initialized module 'numpy.distutils' (most likely due to a circular import) (/tmp/_MEI0fHg0B/numpy/distutils/__init__.pyc) [PYI-40669:ERROR] Failed to execute script 'main_periodica' due to unhandled exception!
第二个错误
Traceback (most recent call last): File "main_periodica.py", line 44, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller/loader/pyimod02_importers.py", line 419, in exec_module File "requests/__init__.py", line 164, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller/loader/pyimod02_importers.py", line 419, in exec_module File "requests/api.py", line 11, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller/loader/pyimod02_importers.py", line 419, in exec_module File "requests/sessions.py", line 15, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller/loader/pyimod02_importers.py", line 419, in exec_module File "requests/adapters.py", line 81, in <module> FileNotFoundError: [Errno 2] No such file or directory [64646] Failed to execute script 'main_periodica' due to unhandled exception!
尝试的解决方法
尝试创建__init__.py文件,未解决问题。
最终解决方案
新建Python虚拟环境,重新安装更新后的所有依赖包,问题得以解决。推测原因为依赖库版本冲突。
内容的提问来源于stack exchange,提问作者Graziano Giacobazzi




