首页 > 解决方案 > Pyinstaller 程序工作正常,但如果我尝试用 zip 或 7z 压缩它,它会冻结 Windows

问题描述

我有一个程序需要作为 exe 分发给我的团队(他们需要有不同版本的 python 作为其他东西的依赖项)。最初,我在 onefile 中拥有所有内容并使用了 --onefile 参数,它工作正常。但为了更好地组织代码,我转移到多个文件。从现在开始在主程序目录的 sub_dir 中运行 exe 调整一些相对路径问题后,它仍然在执行,没有任何问题。但是,一旦我压缩程序目录以发送给我的团队,如果我尝试解压缩它,Windows 基本上会慢下来。最终,任务栏甚至消失了。移动它也需要很长的时间。它只有 40 MB,但有大量文件。每个 Windows 属性 2,586 个文件,281 个文件夹。

我的依赖项列表也大大增加了,所以这可能是相关的:

>altgraph==0.17
>autopep8==1.5.5
>backcall==0.2.0
>cachetools==4.2.1
>codetiming==1.3.0
>colorama==0.4.4
>decorator==4.4.2
>et-xmlfile==1.0.1
>future==0.18.2
>ipykernel==5.5.0
>ipython==7.21.0
>ipython-genutils==0.2.0
>jedi==0.18.0
>jupyter-client==6.1.12
>jupyter-core==4.7.1
>openpyxl==3.0.7
>parso==0.8.1
>pefile==2019.4.18
>pickleshare==0.7.5
>prompt-toolkit==3.0.17
>py2exe==0.10.3.0
>pycodestyle==2.6.0
>Pygments==2.8.1
>pyinstaller==4.2
>pyinstaller-hooks-contrib==2021.1
>python-dateutil==2.8.1
>pywin32==300
>pywin32-ctypes==0.2.0
>PyYAML==5.4.1
>pyzmq==22.0.3
>six==1.15.0
>toml==0.10.2
>tornado==6.1
>tqdm==4.59.0
>traitlets==5.0.5
>wcwidth==0.2.5
>XlsxWriter==1.3.7

我明天要尝试的第一件事是从 venv 卸载 ipython,因为我只需要它来进行 VS 代码交互式 shell 调试。但除此之外,任何想法为什么会发生这种情况?

标签: pythonwindowszippyinstaller

解决方案


是的,事实证明我是对的。我卸载了以下软件包(激活venv后使用pip卸载):

ipykernel ipython ipython-genutils jupyter-client jupyter-core codetiming (codetiming 可能无关,但我不再使用它了)

包从大约 40 MB 到 23 MB,从大约 2500 个文件到 42 个。现在在压缩、解压缩、移动等方面没有延迟。

也许问题是内核在构建时正在运行,并且一些缓存被复制或其他什么?或者 ipython 和 pyinstaller 只是不兼容?

但我认为这个故事更普遍的寓意是在构建要分发的东西时更加谨慎地将开发沙箱环境与生产环境分开。


推荐阅读