目前我的 PyInstaller 规范如下所示:
导入系统 导入操作系统 重新进口 从路径库导入路径 调试 = 真 lib = 路径(“lib/alpha”) hidden_imports = [] hidden_imports += lib.glob("processes/**/*.py") hidden_imports += lib.glob("ui/config_panels/**/*.py") hidden_imports += lib.glob("ui/logic/**/*.py") hidden_imports = list(str(x) for x in hidden_imports) 对于索引,枚举中的路径(hidden_imports): 路径 = re.sub(r"lib(\\|\/)", "", 路径) 如果路径中有“__init__.py”: 路径 = re.sub(r"(\\|\/)__init__.py", "", 路径) 别的: 路径 = re.sub(r"\.py", "", 路径) hidden_imports[index] = ".".join(re.split(r"\\|\/", path)) block_cipher = 无 一=分析( [“app.pyw”], pathex=["lib"], 二进制文件=无, 数据=[ (“图标/*”,“图标”) ], hiddenimports=hidden_imports, hookspath=无, runtime_hooks=无, 排除=无, win_no_prefer_redirects=无, win_private_assemblies=无, 密码=block_cipher ) pyz = PYZ( a.pure,a.zipped_data, 密码=block_cipher ) 执行程序 = 执行程序( 皮兹, a.脚本, a.二进制文件, a.zip 文件, a.数据, 名称=“阿尔法”, 调试=调试, 条=无, upx=真, 控制台=调试, 图标="图标\\foo.ico" )
丑得要命,对吧?
我的源代码树中有一些目录,其文件名遵循特定的命名约定,并使用importlib
. 出于显而易见的原因,我不想将所有这些模块的名称硬编码到我的规范中。
使用“hiddenimports”选项时,参数必须是模块名称列表,因此我必须glob
为文件名,遍历结果列表并“修改”文件名,同时考虑到 Windows 和 Linux 支持。
一定有更好的方法。有什么方法可以告诉 PyInstaller 只包含我的整个源代码树,即下的每个文件lib/alpha
?