有没有办法让 Pyinstaller GUI 引用与其他 GUI 的共享文件夹,以减少磁盘上的冗余库文件

Posted

技术标签:

【中文标题】有没有办法让 Pyinstaller GUI 引用与其他 GUI 的共享文件夹,以减少磁盘上的冗余库文件【英文标题】:Is there a way to have a Pyinstaller GUI reference a shared folder with other GUIs in order to reduce the redundant library files on disk 【发布时间】:2021-02-24 18:42:47 【问题描述】:

我有两个相似的 GUI,它们使用相同的库(PyQT5、numpy、matlibplot),我想知道是否有办法让每个 GUI 文件夹只包含唯一的文件,而让共享文件夹包含相同的文件

基本上是我现在拥有的

--Main Folder
   --GUI_A 
     --GUI_libraries
   --GUI_B 
     --GUI_libraries

并且想要我想要的

--Main Folder
   --GUI_libraries
   --GUI_A(able to reference GUI_libraries)
   --GUI_B(able to reference GUI_libraries) 

我没有使用 --onefile,因此每个 GUI 当前都是一个文件夹,其中包含其必要的文件和可执行文件。

【问题讨论】:

“两个相似的 GUI”是什么意思?这两个程序是否各有不同的软件包? 两个 GUI 都使用完全相同的库和导入构建。除了一个调用 GUIA 和一个调用 GUIB 之外,它们的 .spec 文件是相同的。从美学上讲,它们看起来不同,但包含完全相同的组件 不完全是您所要求的,但是,如果您只创建一个包并提供一个选项(在启动时或通过提供一个通用的“切换器”窗口)来选择哪个包,这不是更容易吗?一个可以用吗? 我想把它扩展到许多 GUI,这样标签系统就不能工作了 我从来没有提到标签。如果 GUI 几乎相同,只是看起来不同,则在启动时提供一个简单的对话框窗口(可能从某个菜单或按钮调用),以便选择使用哪个,可能带有“记住选择/不要”之类的内容不要再问了”复选框。据我所知,pyinstaller 必须将所有内容放在 child 文件夹中才能正确使用它的库,我真诚地怀疑你所问的是否可能(但我可能是错的) , 除非您对两者都使用通用安装路径并且只区分可执行文件。 【参考方案1】:

相信 PyInstaller 中的多打包功能可以让我为*** GUI 保留一组库,并让后续 GUI 引用这些库,而不是拥有相同库的多个本地副本。

https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles

【讨论】:

以上是关于有没有办法让 Pyinstaller GUI 引用与其他 GUI 的共享文件夹,以减少磁盘上的冗余库文件的主要内容,如果未能解决你的问题,请参考以下文章

用PyInstaller打包用PyQt5编写的python程序

来自 tkinter gui 的 .exe 不运行(pyinstaller)

PySide2和pyinstaller gui应用程序将无法在某些Windows计算机上运行

用 pyinstaller 打包生成 exe 后,执行时出现 Failed to execute script 错误

有没有办法在不完全破坏 Anaconda 的情况下安装 PyQt5 以与 Pyinstaller 一起使用?

python3 PyQt5 pyinstaller 打包太大,打包完40M。引用的库写在下面,求大神看怎再能精简一下!!