python - 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 调试。但除此之外,任何想法为什么会发生这种情况?
解决方案
是的,事实证明我是对的。我卸载了以下软件包(激活venv后使用pip卸载):
ipykernel ipython ipython-genutils jupyter-client jupyter-core codetiming (codetiming 可能无关,但我不再使用它了)
包从大约 40 MB 到 23 MB,从大约 2500 个文件到 42 个。现在在压缩、解压缩、移动等方面没有延迟。
也许问题是内核在构建时正在运行,并且一些缓存被复制或其他什么?或者 ipython 和 pyinstaller 只是不兼容?
但我认为这个故事更普遍的寓意是在构建要分发的东西时更加谨慎地将开发沙箱环境与生产环境分开。
推荐阅读
- spring-cloud-gateway - 使用 Spring Cloud Gateway 返回 GZipped 响应被卡住
- intellij-idea - 在 Intellij IDEA 中从查找返回到编辑器快捷方式
- c# - UWP / C# - 如何打印自定义页面大小
- c# - 无法建立 SSL 连接,请参阅内部异常
- mysql - 如何计算3个月前的到期日期将到期
- python - 查找协方差矩阵的特征值
- sql - 从 Firebird 的给定范围中选择日期列表
- python - Pygame 运行没有任何问题,但屏幕上没有绘制任何内容
- git - 如何在不影响以后的提交的情况下恢复旧的 Git 提交?
- javascript - 此 JS IIFE 是否正确传递事件处理程序的事件和参数?