【问题标题】:Pyinstaller produces massive folderPyinstaller 生成海量文件夹
【发布时间】:2018-03-11 12:58:40
【问题描述】:

我正在使用pyinstaller打包启动画面,这些是python脚本的导入:

import subprocess
import time
import sys
import os
import signal
from multiprocessing import Process, Queue
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, Pango

我使用以下命令创建 dist 文件夹:

pyinstaller splash_gui.py 

问题是生成的文件夹是 630Mb,这对于一个启动屏幕程序来说有点过头了,所以我进一步调查发现我可以删除很多文件(最重的是共享文件夹中的文件)包含我的主题,所有主题)但更重要的是我发现绝大多数动态库都是无用的。

通过反复试验,我设法删除了所有不必要的东西(通常会生成一个我不在乎的警告,因为它只是一个闪屏)。有没有直接的方法可以避免这种混乱?简而言之,我只想保留包含实际调用函数的文件。

这是清洁前后的情况:

630Mb                               8Mb
.                                   .
└── splash_gui                      └── splash_gui
    ├── array.so                        ├── binascii.so
    ...                                 ├── _collections.so
    ├── share                           ├── cPickle.so
    │   ├── fontconfig                  ├── cStringIO.so
    │   ├── glib-2.0                    ├── fcntl.so
    │   ├── icons                       ├── _functools.so
    │   ├── locale                      ├── gi._gi.so
    │   ├── mime                        ├── _io.so
    │   └── themes                      ├── itertools.so
    ...                                 ├── libpython2.7.so.1.0
    ├── _sha.so                         ├── math.so
    ├── _socket.so                      ├── _multiprocessing.so
    ├── splash_gui                      ├── operator.so
    ├── _ssl.so                         ├── _random.so
    ├── strop.so                        ├── select.so
    ├── _struct.so                      ├── _socket.so
    ├── termios.so                      ├── splash_gui
    ├── time.so                         ├── _struct.so
    ├── unicodedata.so                  ├── time.so
    └── zlib.so                         └── zlib.so

除了警告之外,启动画面正常工作

【问题讨论】:

  • 只生成一个 exe 而不是文件夹可以吗?
  • 只有在 exe 很小的情况下,一个大的 exe 才会在启动画面出现时产生延迟

标签: python splash-screen pyinstaller


【解决方案1】:

如果一个 .exe 文件(并且没有其他文件夹/文件)是可以接受的(如果你需要检查文件大小,真的只是尝试一下),这是我的解决方案,运行命令:

pyinstaller --onefile "directory\script_name.py"

在当前目录下,会新建一堆文件夹。以下是如何处理它们:

  1. 您的文件将位于“dist”中,并且将被称为 script_name(当然,没有“.py”
  2. 文件夹“dist”和“build”是不必要的,如果出现__pycache__ 也是如此
  3. 此外,还将创建文件“script_name”.spec。

【讨论】:

  • 这将生成一个包含所有文件的存档,确实会更轻(如 300mb),但速度会非常慢。我不想只是隐藏它们......
  • 是的,我就是这样做的,我真的不知道其他方法,所以这只是为了让你开始。
猜你喜欢
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2020-02-22
相关资源
最近更新 更多