在我的“小型”python exe GUI 程序中,tcl 文件夹有 820 个文件(主要是 tzdata)。有机会减少这个数字吗?

问题描述 投票:0回答:3

如标题所述:;我有一个由 pyinstaller 生成的“小”python exe GUI 程序,它创建了一个包含 820 个文件(主要是 tzdata)的 tcl 文件夹。有机会减少这个数字吗?

由于文件很小,复制程序需要很长时间。

Number of files in folder

我使用了日期时间库。我只需要在我正在打印的 pdf 上弹出日期和时间,所以不需要那么花哨。我只需要花在电脑上的时间:)

我可以使用“--onefile”来获取 .exe,但这需要很长时间才能打开。

程序仅适用于Windows atm。

python tcl pyinstaller exe tzdata
3个回答
2
投票

您几乎肯定可以直接删除

http1.0
opt0.4
目录。它们是过时的软件包,仅用于向后兼容。

应保留

*.tcl
tclIndex
文件(
parray.tcl
除外,您可能不需要)。

encoding
msgs
tzdata
目录中,如果您要在一组受限制的位置进行部署,则可以删除其中的大部分内容;您只需要运行时实际使用的编码、消息目录和时区定义。因此,如果您仅支持美国的英语使用者,则可以删除很大一部分文件。 (如果您根本不使用 Tcl 来格式化或解析日期,则不需要任何时区定义。)您必须保留的主要编码是编写脚本所用的编码! (注意:对 UTF-8 和 ISO8859-1 编码的支持,以及用于与 Windows API 对话的 UTF-16 派生编码,都是直接内置于 Tcl 中的;您无法删除对它们的支持。)

您可以删除哪些内容取决于您的应用程序以及部署它的位置。这就是为什么我们无法直接告诉您要删除哪些文件。


0
投票

通常,“生硬”的方法是通过删除文件(或某些文件)来解决问题,并查看您的程序是否按预期工作而没有任何错误。这有时可能相当复杂且耗时,有时甚至不可能。 像 pyinstaller 和 cx_freeze 这样的库往往包含您甚至不需要的文件,因此保证程序可以正常工作。

一般来说,我建议您为您的程序创建一个安装程序(例如 Inno Setup),它看起来确实更专业,并且会减少您当前的问题。

Python还支持压缩库,这些库可以大大减少某些库上应用程序的大小。看看我自己关于主题的问题之一Python3编译的应用程序通过zip减少大小?.

玩得开心!


0
投票

如果您不介意添加本机动态库(dll/so),您可以使用 Tcl 扩展

tclvfs
,并将这 820 个文件存储在 zip 文件中。

AFAIK,

tclvfs
不会将文件提取到临时目录,如 pyinstaller 的“--onefile”(除非您尝试加载本机扩展),所以它应该很快。

演练

获取扩展

您可以从 source 进行构建,也可以从 msys2 获取 Windows 二进制文件。 msys2 二进制文件有点过时(从 2013 年开始),但仍然可以工作。

将包解压到tcl目录下。您只需要

pkgIndex.tcl
vfs.tcl
vfs142.dll
vfslib.tcl
vfsUtils.tcl
zipvfs.tcl
来安装 zip 文件。将它们放在
.../tcl/tclvfs
下。

压缩松散的文件

tcl
目录下的所有原文件打包到
library.zip
中。您可以对
tk
(在
tk
目录下)执行相同操作。

这些文件需要保留在

tcl
目录中:
init.tcl
package.tcl
tclIndex
tm.tcl
(用于加载包)。

补丁
init.tcl

将以下内容添加到

init.tcl
以加载
library.zip

package require vfs::zip
# mount library.zip
vfs::zip::Mount [file join $::tcl_library library.zip] $::tcl_library
# reload index
auto_load_index

现在您有 11 个文件,而不是 820 个。

© www.soinside.com 2019 - 2024. All rights reserved.