使用Pyinstaller的--onefile选项构建exe文件时,可以指定数据(如图片或其他......)
在运行期间,创建了一个tmp目录(MEI *),其中包含python解释器,您原始格式的数据......
Pyinstaller如何嵌入所有这些数据?
.exe文件只是机器码指令对吗?它们不应该是"容器文件" ...
谢谢!
答案 0 :(得分:2)
您是否阅读了pyinstaller手册?
https://pythonhosted.org/PyInstaller/#id22
单文件程序的工作原理引导加载程序是其中的核心 单文件包也。启动时,它会在中创建一个临时文件夹 此操作系统的相应临时文件夹位置。该文件夹已命名 _MEIxxxxxx,其中xxxxxx是随机数。
一个可执行文件包含所有Python的嵌入式存档 脚本使用的模块,以及任何压缩副本 非Python支持文件(例如.so文件)。引导加载程序解压缩 支持文件并将副本写入临时文件夹。 这可能需要一点时间。这就是为什么单文件应用程序有点 比单文件夹应用程序启动慢。
创建临时文件夹后,引导加载程序完全继续 对于单文件夹包,在临时文件夹的上下文中。 当捆绑代码终止时,引导加载程序将删除临时代码 文件夹中。
(在Linux和相关系统中,可以挂载/ tmp文件夹 没有执行"没有执行"选项。该选项与a不兼容 PyInstaller单文件包。它需要执行/ tmp中的代码。)
因为程序会创建一个具有唯一名称的临时文件夹,所以 可以运行应用程序的多个副本;他们不会干扰每一个 其他。但是,在磁盘空间中运行多个副本的成本很高 因为什么都没有分享。
如果程序崩溃或是,则不会删除_MEIxxxxxx文件夹 杀死(在Unix上杀死-9,在Windows上被任务管理器杀死,"强制 退出"在Mac OS上)。因此,如果您的应用经常崩溃,您的用户将会 丢失多个_MEIxxxxxx临时文件夹的磁盘空间。
答案 1 :(得分:0)
好吧,我发现了这个:https://en.wikipedia.org/wiki/Executable_compression
压缩数据可以与解压缩代码一起组成一个可删除的。
因此,Pyinstaller可能包含一个运行时打包程序来执行此操作。