Linux下PyInstaller打包可执行文件运行时出现InvalidVersion错误求助
问题:PyInstaller打包Holoviews脚本后运行报错
packaging.version.InvalidVersion: Invalid version: 'None' 问题场景
使用包含pandas、holoviews等库的Python脚本处理CSV数据,执行pyinstaller grant.py生成可执行文件后,运行./grant时触发版本验证错误。
脚本内容
import datetime import pandas as pd import numpy as np # import xarray as xr import holoviews as hv import colorcet as cc df = pd.read_csv('./grant.csv') print(df.head()) df_2012 = df.loc[df['year']==2012, :].copy() hv.Points( data=df_2012, kdims=['beak length (mm)', 'beak depth (mm)'], vdims=['species'], )
报错信息
Traceback (most recent call last): File "grant.py", line 7, in <module> File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module File "holoviews/__init__.py", line 11, in <module> File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module File "holoviews/util/__init__.py", line 15, in <module> File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module File "holoviews/core/__init__.py", line 3, in <module> File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module File "holoviews/core/boundingregion.py", line 12, in <module> File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module File "holoviews/core/util.py", line 53, in <module> File "packaging/version.py", line 266, in __init__ packaging.version.InvalidVersion: Invalid version: 'None' [1396395] Failed to execute script 'grant' due to unhandled exception!
解决方案
该错误源于PyInstaller打包时,Holoviews依赖的某个库版本号被解析为None,导致packaging.version验证失败。可通过以下方式解决:
方法1:锁定兼容版本
安装与PyInstaller兼容的Holoviews及packaging版本,重新打包:pip install holoviews==1.14.9 packaging==21.3 pyinstaller grant.py方法2:显式指定隐藏依赖
打包时添加--hidden-import参数,补充缺失的版本相关依赖:pyinstaller --hidden-import=packaging.version --hidden-import=holoviews.core.util grant.py方法3:修改Holoviews版本检测逻辑(临时方案)
找到holoviews/core/util.py中版本检测的代码,添加对None值的兼容处理:# 原代码可能类似 # from packaging.version import Version # version = Version(some_version_string) # 修改为 from packaging.version import parse some_version_string = some_version_string or "0.0.0" version = parse(some_version_string)修改后重新打包。
方法4:使用PyInstaller钩子扩展库
安装包含第三方库打包钩子的扩展库,自动处理依赖问题:pip install pyinstaller-hooks-contrib pyinstaller grant.py
内容的提问来源于stack exchange,提问作者Debashish Samantaray
相关产品推荐
相关产品推荐

